我在LMC上创建了一个对输入进行平方的简单程序。
INP
STA X
LDA X
STA Y
LOOP LDA Y
BRZ END
LDA ANSWER
ADD X
STA ANSWER
LDA Y
SUB ONE
STA Y
BRA LOOP
END LDA ANSWER
OUT
SUB ANSWER - This line
STA ANSWER - And this one
HLT
ONE DAT 1
ANSWER DAT 0
X DAT
Y DAT
经过一些测试后,我注意到 没有 上面和下面显示的两行:
SUB ANSWER - This line
STA ANSWER - And this one
......程序似乎没有输出正确的结果。更具体地,在多次运行模拟器之后产生的结果是非常自发的。
我出于好奇而问这个问题,因为我似乎并不理解上面添加的用于使程序工作的行的要点/推理。我认为它完全没有运气。
答案 0 :(得分:1)
这是因为当通过按下Reset按钮为另一次运行提供另一个输入来重置机器时,之前计算的答案仍然在RAM中。重置按钮不会清除内存,也不会在编译后将其重置为状态,因此下一次运行只会在前一次运行时保留内存。
您注意到的代码对执行本身没有任何作用,除了在下一次算法迭代之前将内存中的ANSWER内容归零。它通过从累加器中减去ANSWER的值来实现它(此时包含ANSWER,给出零)并将累加器存储到地址ANSWER中,有效地将零写入。
要通过运行程序演示此程序,请尝试以下序列: