为什么对未签名数字的MIPS操作会给出签名结果?

dan*_*man 14 unsigned mips

当我尝试在MIPS中处理无符号整数时,我执行的每个操作的结果都保持有符号(即,整数都是2的补码),即使我执行的每个操作都是无符号的:addu,multu所以第四个......

当我在该范围内打印数字时,[2^31, 2^32 - 1]我得到它们的"溢出"负值,好像它们已经签名(我猜它们是).

但是,当我尝试这样的事情:

li $v0, 1
li $a0, 2147483648                # or any bigger number
syscall
Run Code Online (Sandbox Code Playgroud)

打印的号码总是 2147483647 (2^31 - 1)

我很困惑......我错过了什么?

PS:我没有包含我的代码,因为它不是非常易读(例如汇编代码)并且抛开这个问题,似乎工作正常.如果有人认为有必要,我会马上加入!

Ped*_*lva 19

来自维基百科:

MIPS32指令集指出,无符号作为加法和减法指令的一部分,用词不当.有符号和无符号版本的命令之间的区别不是操作数的符号扩展(或缺少),而是控制是否在溢出时执行陷阱(例如Add)或忽略溢出(Add unsigned).这些指令的立即操作数CONST始终是符号扩展的.

来自MIPS指令参考:

所有算术立即值都是符号扩展的[...]有符号和无符号指令之间的唯一区别是有符号指令可以生成溢出异常,而无符号指令则不能.