无法理解 lbu 指令

Having trouble understanding lbu instruction

我正在 MARS 中学习 MIPS,我一直在尝试理解 lbu 指令,我需要一些帮助来解开概念。 在“帮助”部分,lbu 定义为:

"lbu $t1,-100($t2)"

“加载无符号字节:将 $t1 设置为有效内存字节地址的零扩展 8 位值”

  1. “-100($t2)”有什么作用?
  2. 零扩展的8bit值到底是什么意思?
  3. 我是否正确理解 lbu 指令从一个寄存器复制前(最右边)8 位并将其插入另一个寄存器?
  4. 如果是这样,“有效内存字节地址”是否指的是原始寄存器(从中进行复制)?

我找不到任何好的解释。也许我的问题有点令人费解,但希望你能明白要点。提前致谢。

我在这里找到了一个 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,即数据部分第二个字节的内容。