【发布时间】:2013-04-03 07:12:01
【问题描述】:
我有以下代码:
ORG 100
LOOP, Load X
Add Z
Store X
Load Y
Skipcond 400
Jump Q
Subt Z
Store Y
Jump LOOP
Q, Output X
Halt
X, Dec 0
Y, Dec 10
Z, Dec 1
现在,如果我理解正确的话,它在某种程度上等同于以下 Python 代码:
x = 0
y = 10
z = 1
while True:
x += z
if y > 0:
y -= 1
else:
exit(0)
如果是这样,我很困惑为什么在循环过程完成后,MARIE 中的 X = 10 和 Python 中的 X = 11。根据我在 MARIE 代码中的理解,skipcond 400 相当于如果 y > 0。如果是这种情况,那么当 x = 10,y = 1 时,它仍然会通过 skipcond 从 y 中减去 1,因此重新启动循环并再次将 1 添加到 x 意味着当循环结束并输出数据时 x = 11。
非常感谢您对理解这一点的帮助,谢谢。
【问题讨论】:
-
你不应该使用
SKIPCOND 800(如果AC>0则跳过)?SKIPCOND 400的意思是“如果 AC==0 则跳过”,因此您目前正在执行类似IF (Y != 0) GOTO Q的操作 -
感谢您指出这一点。这么愚蠢的错误。我意识到我犯了那个错误,并且在结束跳转输出之前我没有再次加载 X。如果你想提交这个作为答案,我会选择它。