.orig x3000
LD R0, A ; A(12) => R0 (this is assumed)
LD R1, B ; B(10) => R1 (this is assumed)
; find negative of the two's complement number in R1
NOT R1, R1
ADD R1, R1, 1
ADD R5, R0, R1 ; R0 - R1 => R5
LD R1, B ; Restore R1
HALT
A .fill 12
B .fill 10
.end
1条答案
按热度按时间hvvq6cgz1#
根据你的问题,我们可以假设12和10已经在
R0
和R1
中,所以正确的算法从NOT
指令开始,到HALT
结束;但是,包含了其他指令,以允许您运行此代码。解决方案是将
R0
与-R1
相加。我们通过对R1
中的数字进行按位求逆(NOT
)并添加1来找到-R1
。这给出了R1的2的补码求反。如果你不懂二进制补码的算术,我建议你看这里。在执行减法之后,我们将原始数字恢复为
R1
。