Nik*_*ntz 2 cpu assembly mips nios
我应该回答这个问题.经过一些研究后,它说add和sub具有相同的操作码,仅在功能领域有所不同.这是答案还是其他什么?
它可以在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
Run Code Online (Sandbox Code Playgroud)
我不知道MIPS甚至有一个正确的subi指令(虽然有些环境可能会为它实现一个宏).
由于您正在减去一个立即值,因此您可以在addi指令中提供它的否定:
addi $r1, $r2, -42 ; equivalent to subi $r1, $r2, 42
Run Code Online (Sandbox Code Playgroud)
立即操作数是一个二进制补码值,这意味着它完全能够成为负数,并且二进制补码的工作方式意味着您可以以无符号方式添加负数,并提供与减去相同的结果(因为您回绕).
例如,-4216位二进制补码是无符号值65494.当您在65536处添加50和65494回绕时,您最终得到:
50
+ 65494 (ie, -42)
-----
65544 (overflow, so
- 65536 we wrap at 64K)
-----
8 (identical to "50 - 42")
Run Code Online (Sandbox Code Playgroud)