在MIPS组装中,使用addiu
而不是addi
有什么好处?是不是addiu
未签名(并将破坏我们的计算?)
并将破坏我们的计算
不,MIPS使用two's complement,因此加法/减法的相同指令可用于有符号和无符号运算。结果没有区别。
对于按位指令,非加宽乘法和许多其他操作也是如此。看到
它们之间的唯一区别是addi
在溢出时产生陷阱,而addiu
则没有。所以addi
及其溢出的家族(add
,sub
......)往往毫无用处。事实上,很少使用addi
was removed in MIPSr6将有价值的操作码空间释放给其他指令
这里的指令名称极具误导性,因为它实际上并不是“无符号”的添加。立即仍然是符号扩展而不是零扩展。所以addiu $1, $2, 0xFFFF
实际上会从$2
中减去1而不是添加65535。
尽管它的名称,添加立即无符号(
addiu
)用于在我们不关心溢出时将常量添加到有符号整数。 MIPS没有减去立即指令,负数需要符号扩展,因此MIPS架构师决定对立即字段进行符号扩展。