Mips 写入寄存器的下一个字节

Mips 写入寄存器的下一个字节,mips,cpu-registers,Mips,Cpu Registers,我知道内存中的寄存器是32位的。我还知道lb会将内存中的内容加载到寄存器的低位8位,如果我这样做了 lb $t1, $a3 lb $t1, 4($a3) 第二个lb命令将覆盖第一个lb命令中加载的内容。但是,有没有一种方法可以写入寄存器的第二个字节(从内存中的不同部分加载,所以不是相邻的两个字节)并保留第一个字节的信息?我假设您想在这里使用的是lbu(加载无符号字节)而不是lb,因为您不希望寄存器进行符号扩展(例如,在寄存器中复制字节AA,将导致000000AA,而不是FFFFFFAA) 如果

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

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

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

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

如果要写入寄存器的第二个字节,可以首先使用
lbu
将该字节从内存加载到另一个寄存器,然后向左移位8位,然后
addu
将其加载到原始寄存器

例如:

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

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

如果要写入寄存器的第二个字节,可以首先使用
lbu
将该字节从内存加载到另一个寄存器,然后向左移位8位,然后
addu
将其加载到原始寄存器

例如:

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