我在MIPS中存在很多问题,无法将值存储在寄存器中(不是div或mult操作)。例如,我需要存储或保存5和8字节的数据。如何在$t3
寄存器中获取0x1235343036(5个字节)的值?
如果我按照
进行操作li $t3,0x1234
li $t4,0x567812
sll $t3,$t3,24
寄存器$t3
仅包含0x34000000。 (12丢失了。在$t4
执行“或”操作后,我需要类似0x1234000000的内容,以便在$t3
寄存器中获得类似0x1234567812的内容。)
我希望寄存器大于32位。我怎样才能做到这一点?
答案 0 :(得分:1)
我不是MIPS汇编专家,但我认为不可能有更大的寄存器(除非你的CPU有一些SIMD指令单元)。您必须通过使用2个寄存器来模拟64位操作来解决此问题。 这是一些伪代码,你可以这样做:
# t1 is high dword of first variable, t2 is low dword of first variable
# t3 is high dword of second variable, t4 is low dword of second variable
# lets assign values to both variables
t1 = 0
t2 = 0x1234
t3 = 0
t4 = 0x567812
#now shift left first by 24 bits
t1 = (t1 << 24) + (t2 >> (32 - 24))
t2 = t2 << 24
#now lets or with second
t1 = t1 | t3
t2 = t2 | t4