1

我在使用 MIPS 将值存储在寄存器中(不是 div 或 mult 操作)时遇到了很多麻烦。例如,我需要存储或保存 5 和 8 个字节的数据。如何在$t3寄存器中获取诸如 0x1235343036(5 个字节)之类的值?

如果我将操作作为

li $t3,0x1234
li $t4,0x567812
sll $t3,$t3,24

该寄存器$t3仅包含 0x34000000。(12 丢失了。我想要 0x1234000000 之类的东西,在执行“或”操作后,在寄存器$t4中获得类似 0x1234567812 的东西。)$t3

我想要大于 32 位的寄存器。我怎样才能做到这一点?

4

1 回答 1

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
于 2011-12-10T18:39:31.960 回答