为什么我的程序正常运行需要这几行汇编代码?

时间:2016-10-29 17:08:04

标签: little-man-computer

我在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

......程序似乎没有输出正确的结果。更具体地,在多次运行模拟器之后产生的结果是非常自发的。

我出于好奇而问这个问题,因为我似乎并不理解上面添加的用于使程序工作的行的要点/推理。我认为它完全没有运气。

1 个答案:

答案 0 :(得分:1)

这是因为当通过按下Reset按钮为另一次运行提供另一个输入来重置机器时,之前计算的答案仍然在RAM中。重置按钮不会清除内存,也不会在编译后将其重置为状态,因此下一次运行只会在前一次运行时保留内存。

您注意到的代码对执行本身没有任何作用,除了在下一次算法迭代之前将内存中的ANSWER内容归零。它通过从累加器中减去ANSWER的值来实现它(此时包含ANSWER,给出零)并将累加器存储到地址ANSWER中,有效地将零写入。

要通过运行程序演示此程序,请尝试以下序列:

  • 将没有这两行的程序组装到内存中
  • 用数字10运行到最后
  • 按重置
  • 使用您知道正方形
  • 的少数选项运行它
  • 结果应该比预期的大100
  • 重新组装您的程序
  • 用数字5运行到最后
  • 按重置
  • 使用您知道正方形
  • 的少数选项运行它
  • 结果应该比预期的大25