gpt4 book ai didi

assembly - 在 MIPS/SPIM 中,li 和 lw 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 11:36:04 32 4
gpt4 key购买 nike

在意识到我对汇编语言和使用 MIPS 有多么迷茫之后,我决定从基础开始,真正理解它。

显然 MIPS 代码有特定的用途,但很多东西似乎都在做类似的事情,我很难理解其中的一些差异。

load immediate.. (li) 和 loading a word.. (lw) 有什么区别?我什至不确定“词”是什么。或者以下内容的作用:

li $t0,y
lw $t0,0($t0)

它是否在第一行将 y 加载到寄存器 $t0 中?然后加载 0($t0) 作为 y?

抱歉,这可能是一个非常愚蠢的问题。如果有人能解释这两条线在做什么以及 li/lw 之间的区别,我将不胜感激。谢谢!

最佳答案

一个word是一个固定长度的位序列。
在MIPS32上,一个word是32位宽。
指令lw $regA, offset($regB)offset($regB) 指定的内存位置加载一个字到寄存器 regA

相比之下,li reg, immediate 不是真正的指令。没有 MIPS cpu 可以执行 li。它是一条伪指令,由汇编程序转换为两条指令的序列:

lui $reg, [most significant 16 bits of immediate]
ori $regA, $regA, [least significant 16 bits of immediate]

lui 使用指令中的立即数加载 32 位寄存器的高 16 位,将低 16 位设置为零。
ori 获取 $regA 的内容,与指令中的 16 位立即数进行按位逻辑或,并将结果存储回 $regA.

因此,总结一下:li $reg, immediate总是相同立即数放入寄存器,而 lw $regA, offset($regB) 将从内存位置 offset($regB) 加载当前值。

关于assembly - 在 MIPS/SPIM 中,li 和 lw 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984244/

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