寄存器间接和 base plus offset 之间的区别是什么?它如何影响您在MIPS架构上编写汇编的方式?我认为这意味着您只能在指令中引用寄存器,并且该寄存器必须指向更多指令?
答案 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指示感兴趣的特定变量。