我对这个问题有疑问,因为我是 LC-3 编程的新手。
编写 LC-3 代码,将 R0 中的值减去 R1 中的值,并将结果放入 R5 中。即编写 R5 := R0 - R1 的汇编代码。假设R1=10,R0为12。
根据你的问题,我们可以假设 12 和 10 已经在R0
and R1
,所以正确的算法从NOT
指令并结束于HALT
;但是,还包含其他说明以允许您运行此代码。
解决方案是添加R0
with -R1
。我们发现-R1
通过按位取反(NOT
)中的数字R1
并加 1。这给出了 R1 的 2 的补数否定。
如果你不明白补码算术,我建议看看here。执行减法后,我们将原始数字恢复为R1
.
.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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)