【问题标题】:Skipcond in MARIE Assembly LanguageMARIE 汇编语言中的 Skipcond
【发布时间】: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。如果你想提交这个作为答案,我会选择它。

标签: assembly marie


【解决方案1】:

您的SKIPCOND 是“倒置的”。条件 400 表示 skip if AC==0。所以这段代码:

  Load   Y
  Skipcond 400
  Jump   Q

实际上会这样做:

IF (Y != 0) GOTO Q

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-10-07
    • 1970-01-01
    • 2013-01-17
    • 2013-09-04
    相关资源
    最近更新 更多