寄存器间接和基数加上偏移量有什么区别,它是如何影响你在MIPS架构上编写汇编的?我认为这意味着你只能在指令中引用寄存器,并且该寄存器必须指向更多指令?在MIPS寻址模式下寄存器间接和基址加偏移之间的区别?
回答
“寄存器间接”寻址装置,其将由 指令(称为“有效地址”)中使用的地址是从一个 寄存器的内容,采取而不是被直接编码指令本身 内(这是“绝对”寻址)。 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时,这相当于寄存器间接寻址 。
当偏移量为零时,寄存器间接寻址模式只是基址+偏移寻址模式的特例。
当您有一个具有多个数据项目的结构并且想要引用这些项目时,将使用基本加偏移量寻址模式。基址寄存器指向结构的开始,偏移量用于提取特定项目。示例是加载一个虚拟方法的地址,其中基址寄存器指向虚方法表的基址,偏移量指示感兴趣的方法。另一个例子是在栈上引用函数的局部变量,其中基址寄存器指向函数的栈帧,偏移量表示特定的感兴趣变量。
你能提供一个相同指令的例子,但是对于这两种模式,汇编? – knownasilya
基础加偏移:'sw $ s0,4($ sp)',寄存器间接:'sw $ s1,0($ sp)'。 –
- 1. 寄存器间接寻址
- 2. 寄存器寻址模式与直接寻址模式
- 3. 寻址模式中偏移和索引之间的差异?
- 4. x86寄存器名称,寻址模式,位移和存储器
- 5. 偏移和RVA之间的区别
- 6. 基于ebp的寻址和esp寻址的区别
- 7. 使用索引寻址模式将地址移动到寄存器
- 8. 是否有一个CALL指令支持带偏移量的寄存器间接寻址?
- 9. 直接存储器寻址模式
- 10. PyCUDA内存寻址:内存偏移量?
- 11. MIPS:将寄存器地址复制到另一个寄存器
- 12. 加载地址存储在MIPS寄存器中
- 13. gdb地址和“真实”地址之间的区别?
- 14. Mac地址和蓝牙地址之间的区别
- 15. 内部IP地址和外部IP地址之间的区别
- 16. SSIS中的间接寻址
- 17. 内核加载地址和入口点之间的区别
- 18. 内存地址和偏移
- 19. MIPS相对寻址
- 20. MIPS标签寻址?
- 21. MIPS寻址问题
- 22. mips:做寄存器包含地址或模拟值
- 23. 字寻址和字节寻址的区别
- 24. 基本网址和基本链接网址有什么区别?
- 25. 代理模式和适配器模式之间的区别?
- 26. 构造器模式和原型模式之间的区别
- 27. PayPal IPN在通知网址和返回网址之间的区别
- 28. 索引寻址模式和隐含寻址模式
- 29. MIPS汇编中的内存寻址
- 30. PE头基址偏移
那么如果存在一个不是0的偏移量,那么“Register Indirect”中的等效项是什么? – knownasilya
寄存器间接性不够灵活,因为它只有基底+偏移量的一半。但你可以自己添加胶印,例如'addiu $ ra,$ ra,4; jr $ ra'。 –
因此,偏移量可以引用接近'$ ra'但移动了4位的内存?我只是试图让这些概念下降:)谢谢! – knownasilya