gpt4 book ai didi

assembly - MIPS:lw(加载字)指令

转载 作者:行者123 更新时间:2023-12-01 07:36:41 27 4
gpt4 key购买 nike

lw $s0,8($0)lw $s0,0($v0) ?

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

编辑:

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

最佳答案

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

lw RegDest, Offset(RegSource)

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

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

所以, lw $s0,8($0)表示加载 $s0位于 $0 指定的地址处的字的内容加 8. 如 $0正在注册 $zero它将始终包含常量零,它会将位于绝对地址 8 中的字加载到 $s0 中。 .
lw $s0,0($v0)表示加载 $s0位于 $v0 指定地址处的字的内容.如 $v0包含值 8 则两条指令具有相同的效果。如 $v0不是 4 的倍数,指令将产生寻址陷阱。

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

关于assembly - MIPS:lw(加载字)指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31563768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com