繁体   English   中英

MIPS寻址模式下寄存器间接寻址与基址加偏移量之间的区别?

[英]Difference between register indirect and base plus offset in MIPS addressing mode?

寄存器间接寻址基加偏移之间有什么区别,它如何影响您在MIPS架构上编写汇编的方式? 我认为这意味着您只能在一条指令中引用该寄存器,而该寄存器必须指向更多指令?

“寄存器间接”寻址是指指令要使用的地址(称为“有效地址”)取自寄存器的内容,而不是直接在指令本身内进行编码(“绝对”寻址) )。 MIPS对于这两种寻址模式都有跳转说明:

j 0x1234

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

jr $ra

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM