我应该回答这个问题。经过一番研究后发现,add 和 sub 具有相同的操作码,仅在功能领域有所不同。这是答案还是其他什么?
Update
Nios II CPU 手册中提供了它:
subi
subtract immediate
Operation: rB ← rA – σ (IMMED)
Assembler Syntax: subi rB, rA, IMMED
Example: subi r8, r8, 4
Description: Sign-extends the immediate value IMMED to 32 bits, subtracts it from the value of rA and then
stores the result in rB.
Usage: The maximum allowed value of IMMED is 32768. The minimum allowed value is
–32767.
Pseudo-instruction:
© March 2009
subi is implemented as addi rB, rA, -IMMED
我什至不知道 MIPShas正确的subi
指令(尽管某些环境可能会为其实现宏)。
因为你要减去一个即时值,您只需将其否定提供给addi
操作说明:
addi $r1, $r2, -42 ; equivalent to subi $r1, $r2, 42
立即操作数是二进制补码值,这意味着它完全可以是负数,而二进制补码的工作方式意味着您可以在unsigned方式,这给出了与减法相同的结果(因为你回绕了)。
例如,-42
16 位二进制补码是无符号值65494
。当你添加50
and 65494
绕到 65536 处,您最终会得到:
50
+ 65494 (ie, -42)
-----
65544 (overflow, so
- 65536 we wrap at 64K)
-----
8 (identical to "50 - 42")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)