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