2011-11-16 37 views

回答

5

“寄存器间接”寻址装置,其将由 指令(称为“有效地址”)中使用的地址是从一个 寄存器的内容,采取而不是被直接编码指令本身 内(这是“绝对”寻址)。 MIPS具有跳转指令为这两个 寻址模式:

j 0x1234 

手段“跳解决0x1234”(绝对寻址),而

jr $ra 

手段“跳转到包含在$ra寄存器中的地址“(寄存器间接寻址 )。

“Base plus offset”寻址意味着从基地址取自寄存器的 内容,然后添加一个偏移量(在指令 本身编码)。 MIPS将这种寻址模式用于加载和存储。对于 例如:

lw $t0, 0($a0) 
lw $t1, 4($a0) 

...如果$a0包含0x1234,然后$t0将与字在 地址0x1234加载(该有效地址寄存器的内容,再加 为0的偏移量),和$t1将装载地址0x1238 (有效地址是寄存器的内容,加上偏移量4)的字。如你所见,当偏移量为0时,这相当于寄存器间接寻址 。

+0

那么如果存在一个不是0的偏移量,那么“Register Indirect”中的等效项是什么? – knownasilya

+0

寄存器间接性不够灵活,因为它只有基底+偏移量的一半。但你可以自己添加胶印,例如'addiu $ ra,$ ra,4; jr $ ra'。 –

+0

因此,偏移量可以引用接近'$ ra'但移动了4位的内存?我只是试图让这些概念下降:)谢谢! – knownasilya

3

当偏移量为零时,寄存器间接寻址模式只是基址+偏移寻址模式的特例。

当您有一个具有多个数据项目的结构并且想要引用这些项目时,将使用基本加偏移量寻址模式。基址寄存器指向结构的开始,偏移量用于提取特定项目。示例是加载一个虚拟方法的地址,其中基址寄存器指向虚方法表的基址,偏移量指示感兴趣的方法。另一个例子是在栈上引用函数的局部变量,其中基址寄存器指向函数的栈帧,偏移量表示特定的感兴趣变量。

+0

你能提供一个相同指令的例子,但是对于这两种模式,汇编? – knownasilya

+0

基础加偏移:'sw $ s0,4($ sp)',寄存器间接:'sw $ s1,0($ sp)'。 –