1

我有以下代码:

      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 相当于 if y > 0。如果是这种情况,那么当 x = 10,y = 1 时,它仍然会通过 skipcond 从 y 中减去 1,因此重新启动循环并再次将 1 添加到 x 意味着当循环结束并输出数据时 x = 11。

一些帮助理解这一点将不胜感激,谢谢。

4

1 回答 1

1

SKIPCOND是“颠倒的”。条件 400 表示如果 AC==0 则跳过。所以这段代码:

  Load   Y
  Skipcond 400
  Jump   Q

实际上会:

IF (Y != 0) GOTO Q

这似乎与您想要做的相反。您可能想要的是SKIPCOND 800(如果 AC > 0 则跳过)。

于 2013-04-03T08:50:35.067 回答