如何在 MIPS 中存储无符号 32 位双字

问题描述 投票:0回答:1

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
1个回答
0
投票

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 位为零。

© www.soinside.com 2019 - 2024. All rights reserved.