为什么我的程序正常运行需要这几行汇编代码?
Why are these few lines of assembly code necessary for my program to function properly?
我在 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
...程序似乎没有输出正确的结果。更具体地说,在 运行 模拟器多次之后,产生的结果是非常自发的。
我问这个问题是出于好奇,因为我似乎不理解我在上面为使程序运行而添加的 point/reasoning 行。我让它工作纯粹是出于运气。
这是因为当通过按下重置按钮为另一个 运行 提供另一个输入来重置机器时,之前计算的答案仍然在 RAM 中。 Reset 按钮不会清除内存,也不会在编译后将其重置为状态,因此下一个 运行 只是 运行s 通过内存,因为它是由前一个 运行.
除了在下一次算法迭代之前将内存中 ANSWER 的内容归零外,您记下的代码对执行本身没有任何作用。它通过从累加器(此时包含 ANSWER,给出零)中减去 ANSWER 的值并将累加器存储到地址 ANSWER 中,有效地在那里写入零来实现。
为了通过运行宁你的程序证明这一点,试试这个序列:
- Assemble你的程序没有这两行进入内存
- 运行 它以数字 10 结尾
- 按下重置键
- 运行它与你选择的小数你知道的平方
- 结果应该比预期的大 100
- Assemble又是你的程序
- 运行 以数字 5 结尾
- 按下重置键
- 运行它与你选择的小数你知道的平方
- 结果应该比预期的大 25
我在 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
...程序似乎没有输出正确的结果。更具体地说,在 运行 模拟器多次之后,产生的结果是非常自发的。
我问这个问题是出于好奇,因为我似乎不理解我在上面为使程序运行而添加的 point/reasoning 行。我让它工作纯粹是出于运气。
这是因为当通过按下重置按钮为另一个 运行 提供另一个输入来重置机器时,之前计算的答案仍然在 RAM 中。 Reset 按钮不会清除内存,也不会在编译后将其重置为状态,因此下一个 运行 只是 运行s 通过内存,因为它是由前一个 运行.
除了在下一次算法迭代之前将内存中 ANSWER 的内容归零外,您记下的代码对执行本身没有任何作用。它通过从累加器(此时包含 ANSWER,给出零)中减去 ANSWER 的值并将累加器存储到地址 ANSWER 中,有效地在那里写入零来实现。
为了通过运行宁你的程序证明这一点,试试这个序列:
- Assemble你的程序没有这两行进入内存
- 运行 它以数字 10 结尾
- 按下重置键
- 运行它与你选择的小数你知道的平方
- 结果应该比预期的大 100
- Assemble又是你的程序
- 运行 以数字 5 结尾
- 按下重置键
- 运行它与你选择的小数你知道的平方
- 结果应该比预期的大 25