【问题标题】:Storing more than 32 bits in MIPS在 MIPS 中存储超过 32 位
【发布时间】:2011-12-10 17:56:53
【问题描述】:

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

如果我做的操作是

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

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

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

【问题讨论】:

  • 虽然您没有指定,但很明显您使用的是 32 位处理器内核,这意味着寄存器宽度为 32 位。左移操作会丢弃最左边的位。
  • 寄存器大小是固定的。您不能将大于 32 位的值存储到 32 位 MIPS 中的单个寄存器中

标签: assembly mips mips32


【解决方案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

【讨论】:

  • mm 听起来更好,我会试试的。谢谢! :)
  • 如果你迁移到 MIPS64,你可以拥有更大的寄存器
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多