我们为什么要使用addiu而不是addi?

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

在MIPS组装中,使用addiu而不是addi有什么好处?是不是addiu未签名(并将破坏我们的计算?)

assembly mips add unsigned immediate-operand
1个回答
5
投票

并将破坏我们的计算

不,MIPS使用two's complement,因此加法/减法的相同指令可用于有符号和无符号运算。结果没有区别。

对于按位指令,非加宽乘法和许多其他操作也是如此。看到

它们之间的唯一区别是addi在溢出时产生陷阱,而addiu则没有。所以addi及其溢出的家族(addsub ......)往往毫无用处。事实上,很少使用addi was removed in MIPSr6将有价值的操作码空间释放给其他指令

这里的指令名称极具误导性,因为它实际上并不是“无符号”的添加。立即仍然是符号扩展而不是零扩展。所以addiu $1, $2, 0xFFFF实际上会从$2中减去1而不是添加65535。

尽管它的名称,添加立即无符号(addiu)用于在我们不关心溢出时将常量添加到有符号整数。 MIPS没有减去立即指令,负数需要符号扩展,因此MIPS架构师决定对立即字段进行符号扩展。

Computer Organization and Design: The Hardware/software Interface By David A. Patterson, John L. Hennessy

阅读更多Difference between add and addu

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