如何修改此 LC-3 代码以使其计算 0 而不是 1 的数量
.ORIG x3000
LD R2, INPUT
AND R0, R0, #0 ; COUNTER INITIALIZED TO ZERO
ADD R1, R0, #1
ADD R3, R0, #15
LOOP
AND R4, R2, R1
BRz SKIP
ADD R0, R0, #1
SKIP
ADD R1, R1, R1
ADD R3, R3, #-1
BRzp LOOP
INPUT .FILL x1997
.END
你看过它在调试器中是如何工作的吗? 单步执行这个小程序,您就会看到它是如何工作的。
你能在这里找到 if-then 结构吗? if-then 结构的形式为 if-condition-then-action。 所以,您正在寻找具有这种效果的东西:
if ( bit is set )
R0++;
并且您想将其更改为相反的条件,因此它会计算零。
if ( bit is clear )
R0++;
其中
bit is clear
与 ! (bit is set)
相同,即相反。
请注意,以上内容是针对 C 等结构化语言而言的。在汇编中,if-condition-then-action 看起来更像是这样:
if ( condition is false ) goto Label1; // action is skipped if condition is false
..action.. // action runs if condition is true
Label1:
这是因为汇编/机器代码中唯一的控制结构是条件分支,在 C 中看起来像
if ( condition ) goto label;
如果,我想,你的程序没问题(我不尝试),一个快速修改是将所有 0 翻转为 1,将 1 翻转为 0。
不做这项工作! 我把练习留给你了。
另一种方法是,如果你数 n 位 1,这意味着你有 16-n 位 0... 再说一次,NOT 是你计算 16-n 的朋友
请注意,两者都保留了可以用作子例程的代码。
不要忘记使用HALT来停止程序