我在火星学习MIPS,我一直在尝试理解lbu的教学,我需要一些帮助来解开概念。在“帮助”一节中,lbu被定义为:
“$t1,-100($t2)”
“加载字节无符号:从有效内存字节地址将$t1设置为零扩展8位值”
我找不到任何好的解释。也许我的问题有点复杂,但希望你能得到要点。提前谢谢。
发布于 2021-09-08 22:20:37
在"lbu $t1,-100($t2)“中,$t1
和$t2
是32个MIPS寄存器中任意一个的占位符,-100
是16位符号扩展立即的占位符。
指令从由于添加第二寄存器的内容(示例中为$t2
)和16位立即签名的内容而产生的有效存储器地址读取字节,然后目标寄存器的内容(示例中的$t1
)用从内存读取的字节(在8个最小有效位中)加载,并在24个最重要位中填充0。
因此,例如,您可能在MARS中有以下示例代码:
.data
info: .byte 0x10
.byte 0x20
last: .byte 0x30
.text
li $a0, 0xFFFFFFFF
la $t0, info
lbu $a0, 0($t0)
la $t1, last
lbu $a1, -1($t1)
li $v0, 10
syscall # terminate
在执行lbu $a0, 0($t0)
之前,$a0
将保存0xFFFFFFFF
,$t0
将保存数据部分开始的地址。
在执行该指令之后,$a0
将保存0x10
,即数据部分的第一个字节的内容。
在执行lbu $a1, -1($t1)
之前,$t1
将保存数据部分包含最后(第三个)字节的地址(示例中内容为0x30
的地址)。还请注意,我正在使用-1
作为本指令中的直接内容。
在执行该指令之后,$a1
将保存0x20
,即数据部分第二个字节的内容。
发布于 2021-09-08 21:18:57
我在这里找到了一个MIPS程序集引用:
https://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf
它说($t2)
是寄存器$t2
中保存的地址(寄存器集$8
为$15
),-100
的意思是减去100并使用它作为实际地址。
https://stackoverflow.com/questions/69109647
复制相似问题