MIPS 中任何寄存器允许的值范围为:-2,147,483,648 到 2,147,483,647
但是,我不需要有符号整数,因此我希望值介于 0 到 4,294,967,295 之间。
我尝试在 MIPS 中定义 dword,但它无法识别该关键字。
有什么方法可以让注册表不签名吗?
我尝试过的代码:
.data
.text
main:
li $v0, 5
syscall
move $t0, $v0
li $v0, 1
addu $a0, $t0, 0
syscall
我尝试了说明
addu
这是无符号加法,但我仍然无法存储大于 2,147,483,647 的值,并且 mars 模拟器 给我一个执行错误
mips 中的“字”是 32 位,双字则为 64 位。听起来你令人困惑的标题应该是“如何在 MIPS 中存储无符号的 32 位字”
寄存器没有有符号或无符号或整数或浮点或字符等概念。这完全是程序员和语言的概念。寄存器保存 32 位,您决定这些位的含义(有符号整型、无符号整型、浮点型等)。
Mips 提供伪指令,因此如果您不想这样做,您就不必做这些工作。
li $2,0x87654321
li $2,0x11111111
li $2,0xFFFFFFFF
Disassembly of section .text:
00000000 <.text>:
0: 3c028765 lui $2,0x8765
4: 34424321 ori $2,$2,0x4321
8: 3c021111 lui $2,0x1111
c: 34421111 ori $2,$2,0x1111
10: 2402ffff li $2,-1
最后一个的-1 严格来说是一个语言问题,而不是寄存器已签名。请注意,0xFFFFFFFF 同时是有符号的 -1 和无符号的 0xFFFFFFFF 以及其他东西。
如您所见,Mips 使用真实指令使事情变得简单,通用配对是 lui,然后是 ori 或 addi 来填充较低位,只需查看指令文档(没有指令集,您如何编写汇编语言代码文档?)看看每个的作用。
立即数左移 16 位并存储在寄存器中。低 16 位为零。