MIPS寻址模式下寄存器间接和基本加偏移之间的差异?

时间:2011-11-16 23:35:52

标签: assembly architecture mips addressing-mode

寄存器间接 base plus offset 之间的区别是什么?它如何影响您在MIPS架构上编写汇编的方式?我认为这意味着您只能在指令中引用寄存器,并且该寄存器必须指向更多指令?

2 个答案:

答案 0 :(得分:5)

“寄存器间接”寻址意味着将使用的地址 指令(称为“有效地址”)取自a的内容 注册,而不是直接在指令本身内编码 (这是“绝对”的解决方案)。 MIPS对这两者都有跳转指令 寻址模式:

j 0x1234

表示“跳转到地址0x1234”(绝对寻址),而

jr $ra

表示“跳转到$ra寄存器中包含的地址”(间接寄存器 寻址)。

“Base plus offset”寻址意味着从中获取基址 寄存器的内容,然后是偏移量(在指令中编码) 本身)添加。 MIPS使用此寻址模式进行加载和存储。对于 例如:

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

...如果$a0包含0x1234,则$t0将加载单词at 地址0x1234(有效地址是寄存器的内容,加上 偏移量为0),$t1将加载地址为0x1238的字词 (有效地址是寄存器的内容,加上4的偏移量。)

如您所见,当偏移量为0时,这相当于寄存器间接值 寻址。

答案 1 :(得分:3)

当偏移为零时,寄存器间接寻址模式只是基极加偏移寻址模式的一种特殊情况。

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