如何将R2的值更改为负数,以便我可以减去两个数字?

时间:2019-04-24 23:17:06

标签: lc3

我要减去两个数字,但是当我不使用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        
;

1 个答案:

答案 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肯定会被视为负值-只是不是正确的加法逆。