【发布时间】:2011-11-16 23:35:51
【问题描述】:
间接注册和base plus offset有什么区别,它如何影响你在MIPS架构上编写程序集的方式?我认为这意味着您只能在一条指令中引用该寄存器,而该寄存器必须指向更多指令?
【问题讨论】:
标签: assembly architecture mips addressing-mode
间接注册和base plus offset有什么区别,它如何影响你在MIPS架构上编写程序集的方式?我认为这意味着您只能在一条指令中引用该寄存器,而该寄存器必须指向更多指令?
【问题讨论】:
标签: assembly architecture mips addressing-mode
“注册间接”寻址意味着将被使用的地址 指令(称为“有效地址”)取自 寄存器,而不是直接在指令本身内编码 (这是“绝对”寻址)。 MIPS 对这两个都有跳转指令 寻址模式:
j 0x1234
表示“跳转到地址0x1234”(绝对寻址),而
jr $ra
表示“跳转到$ra寄存器中包含的地址”(寄存器间接
寻址)。
“基址加偏移”寻址意味着基址取自 寄存器的内容,然后是偏移量(在指令中编码 本身)被添加。 MIPS 使用这种寻址模式进行加载和存储。为了 示例:
lw $t0, 0($a0)
lw $t1, 4($a0)
...如果$a0 包含0x1234,则$t0 将加载单词 at
地址0x1234(有效地址是寄存器的内容,加上
偏移量 0),并且$t1 将加载地址0x1238 处的字
(有效地址是寄存器的内容,加上偏移量4)。
可以看到,当偏移量为0时,这相当于寄存器间接 寻址。
【讨论】:
addiu $ra, $ra, 4 ; jr $ra.
$ra但移动超过4位的内存?我只是想把这些概念记下来:) 谢谢!
jr 只提供寄存器间接寻址。访问数据是另一回事:希望在距给定基地址的固定小偏移处查找数据是很常见的。
寄存器间接寻址方式只是偏移量为零时基址加偏移量寻址方式的一种特例。
当您有一个包含多个数据项的结构并希望引用这些项时,使用基数加偏移寻址模式。基址寄存器指向结构的开头,偏移量用于提取特定项目。示例是加载虚拟方法的地址,其中基址寄存器指向虚拟方法表的基址,偏移量表示感兴趣的方法。另一个例子是引用函数在堆栈上的局部变量,其中基址寄存器指向函数的堆栈帧,偏移量表示感兴趣的特定变量。
【讨论】:
sw $s0, 4($sp),间接寄存器:sw $s1, 0($sp)。