【问题标题】:MIPS: lw (load word) instructionMIPS:lw(加载字)指令
【发布时间】:2015-10-12 08:47:05
【问题描述】:

lw $s0,8($0)lw $s0,0($v0)一样吗?

我看不出有什么不同。我认为 8 代表偏移量,这意味着我们需要 $0 的地址并将 2 (8/4) 添加到地址。

编辑:

我的问题是关于 lw 指令和 MIPS 寄存器集。我很难理解偏移究竟是如何工作的......

【问题讨论】:

  • 这个问题不是很多..你能添加更多细节吗?澄清。
  • lw $s0,8($0)lw $s0,0($v0) 一样吗?” 如果$v0 的值为8,是的。否则,不。

标签: assembly mips


【解决方案1】:

尽管在某些情况下它们的行为相似,但它们并不相同。 lw指令格式如下:

lw RegDest, Offset(RegSource)

其中 RegDest 和 RegSource 是 MIPS 寄存器,Offset 是立即数。

这意味着,将寄存器 RegSource 的内容和指定的偏移量相加后的地址中包含的字加载到寄存器 RegDest。生成的源地址必须是字对齐的(即 4 的倍数)

因此, lw $s0,8($0) 表示将位于$0 指定地址的字的内容加载到$s0 中加上8。由于$0 是寄存器$zero,它将始终包含常数零,它将加载位于绝对地址 8 变成$s0

lw $s0,0($v0) 表示将位于$v0 指定地址的字的内容加载到$s0 中。如果$v0 包含值 8,则两条指令具有相同的效果。如果$v0 不是 4 的倍数,该指令将产生寻址陷阱。

通常lw 是一个伪指令,因为汇编器可能会发出多个指令来完成该指令。偏移量(位移)必须是 16 位有符号值。 如果您的指令有一个包含更多位的立即数,汇编器通常会使用一个临时寄存器 ($at) 来保存立即数的内容,然后发出等效指令来执行预期的行为。您可以使用反汇编程序或 MIPS 监视器(也使用 MARS 模拟器检查代码)看到这一点。

【讨论】:

  • 为了澄清,偏移量是位数,而不是字节,对吗?
  • @ryanwebjackson: 偏移量是字节数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多