写入寄存器的下一个字节

Write into next byte of a register

我知道内存中的寄存器是32位的。我也明白 lb 会将内存中的内容加载到寄存器的低 8 位,如果我这样做

lb $t1, $a3
lb $t1, 4($a3)

第二个 lb 命令将覆盖第一个加载的内容。但是,有没有办法写入寄存器的第二个字节(从内存中的不同部分加载,所以两个字节不是彼此相邻)并保留第一个字节的信息?

我假设你想在这里使用的是 lbu (加载无符号字节)而不是 lb 因为你不希望寄存器被符号扩展(例如复制字节 AA 在寄存器中将导致 000000AA,而不是 FFFFFFAA).

如果你想写入寄存器的第二个字节,你可以先使用lbu将字节从内存加载到另一个寄存器,然后左移8 bits,然后 addu 到原来的寄存器。

例如:

lbu $t1, $a3        # 0x000000AA
lbu $t2, 4($a3)     # 0x000000BB
sll $t2, $t2, 8     # 0x000000BB -> 0x0000BB00
addu $t1, $t1, $t2  # 0x000000AA + 0x0000BB00 = 0x0000BBAA