无法理解 lbu 指令
Having trouble understanding lbu instruction
我正在 MARS 中学习 MIPS,我一直在尝试理解 lbu 指令,我需要一些帮助来解开概念。
在“帮助”部分,lbu 定义为:
"lbu $t1,-100($t2)"
“加载无符号字节:将 $t1 设置为有效内存字节地址的零扩展 8 位值”
- “-100($t2)”有什么作用?
- 零扩展的8bit值到底是什么意思?
- 我是否正确理解 lbu 指令从一个寄存器复制前(最右边)8 位并将其插入另一个寄存器?
- 如果是这样,“有效内存字节地址”是否指的是原始寄存器(从中进行复制)?
我找不到任何好的解释。也许我的问题有点令人费解,但希望你能明白要点。提前致谢。
我在这里找到了一个 MIPS 汇编参考:
https://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf
表示($t2)
是寄存器$t2
(</code>到<code>
中的一个寄存器)保存的地址,-100
表示减法100 并将其用作实际地址。
In "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
,即数据部分第二个字节的内容。
我正在 MARS 中学习 MIPS,我一直在尝试理解 lbu 指令,我需要一些帮助来解开概念。 在“帮助”部分,lbu 定义为:
"lbu $t1,-100($t2)"
“加载无符号字节:将 $t1 设置为有效内存字节地址的零扩展 8 位值”
- “-100($t2)”有什么作用?
- 零扩展的8bit值到底是什么意思?
- 我是否正确理解 lbu 指令从一个寄存器复制前(最右边)8 位并将其插入另一个寄存器?
- 如果是这样,“有效内存字节地址”是否指的是原始寄存器(从中进行复制)?
我找不到任何好的解释。也许我的问题有点令人费解,但希望你能明白要点。提前致谢。
我在这里找到了一个 MIPS 汇编参考:
https://www.cs.unibo.it/~solmi/teaching/arch_2002-2003/AssemblyLanguageProgDoc.pdf
表示($t2)
是寄存器$t2
(</code>到<code>
中的一个寄存器)保存的地址,-100
表示减法100 并将其用作实际地址。
In "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
,即数据部分第二个字节的内容。