我要减去两个数字,但是当我不使用r2时,r2不会变成负数吗?
; Start calculation
NOT R2, R2
ADD R2, R3, R2 ; The second operand is at R3
JSR CONV
AND R0, R0, #0
ADD R0, R0, #10 ; Print a new line
OUT
BRnzp REDO
;
答案 0 :(得分:0)
LC3没有用于减法的操作码。它依赖于在无符号意义上将减数的二的补码添加到被减数,并忽略溢出。二进制补码与按位补码(即NOT
)不同。数字的2的补码是其按位补码(相对于适用的位宽),加1 :
NOT R2, R2
ADD R2, R2, #1 ; This is missing from your version
ADD R2, R3, R2
话虽如此,我不确定当您说“ r2不会变成负数”时,您会看到什么。负数以二进制补码形式表示时,负数和较大的正数之间的差异是解释的问题,而不是形式。对于在二进制补码系统中被视为正的R2
值,NOT R2
肯定会被视为负值-只是不是正确的加法逆。