【问题标题】:I cant figure out why this MARIE Sim code wont work properly我不明白为什么这个 MARIE Sim 代码不能正常工作
【发布时间】:2014-11-04 18:44:31
【问题描述】:

所以,我在使用 MARIE 模拟器时遇到了问题。提示如下:

define a decimal variable X and set X = 0    
define a decimal variable Y and set Y = 0

Input a number in decimal form from the keyboard
store the number in location X
Input a number in decimal form from the keyboard
store the number in location Y

If X > 0, then
  X = X + 5
Else
  X = Y - 2
Endif
Display X using the output instruction

编辑:当前代码:

          org 100
          input
          store X
          input
          store Y
          load X
          skipcond 800
          Jump Else
          load X
          Add A
          store X
          jump Endif
Else,     load Y
          Subt B
          store X
Endif,    Load X
          Output
          Halt

X,      dec 0
Y,      dec 0
A,      dec 5
B,      dec 2

我的问题来自这样一个事实,即当您运行它时,数学计算不正确。例如,如果您为 X 输入 4,则答案是 7,而应该是 9。谁能指出我哪里出错了?

【问题讨论】:

    标签: assembly marie


    【解决方案1】:

    让我知道这是否适合你:

    org 100
        input
        store X
        input
        store Y
     load X
        skipcond 800
    
    Jump Else
        load X
        Add Addr
        store X
        jump Endif
    Else,   load Y
        Subt Subtr
        store X
    Endif,      Load X
        Output
        Halt
    X,      dec 0
    Y,      dec 0
    Addr,   dec 5
    Subtr,  dec 2
    

    【讨论】:

    • 负面的,不幸的是。它与我目前遇到的问题相同。 if 的 X 部分很好,但如果它转到 else,无论 Y 的输入是什么,输出总是 2。
    • 您在输入什么以及上述输入的结果?每当我为 x 输入 4 并为它输入 10 时,它在我的 marie sim 上输出 9。当我为 x 输入 -5,然后为 Y 输入 7 时,十进制输出为 5。您是否正确保存并确保更新了以前的代码,或者尝试创建一个新的空白编辑并粘贴我发布的内容并保存和组装那,然后测试我提供的输入,看看它是否相同。
    • 我一到电脑就直接试试copyong。
    • 是的,直接将整个块复制到一个新的空白块中并将其另存为新名称,然后单击组装然后返回并重新加载并测试它。每次新运行我都会重新加载它以重置所有内容,因为 marie 程序有问题,之前没有更新我保存的编辑,所以我认为你可能有类似的问题,它仍然有你以前保存的组装和运行它而不是运行您已完成的任何新保存。如果有任何东西报告/发布您的输入和输出结果,也许我们可以直截了当。
    • 不行。我直接复制了,没变,输入-5和7,输出还是2
    【解决方案2】:

    您的错误在于您使用skipcond 的方式和时间。由于您在读取 ​​Y 后立即使用它,因此用户输入的内容仍然在 AC 中,因此例如,如果您输入 4 和 10,您最终会得到 15 (10+5),然后直接跳到 endif。

    您要做的是将 X 加载回 AC,然后使用skipcond 检查它,然后进入您的其余逻辑。您可能还想使用更多的jumps 来确保您正在执行正确的块。

    【讨论】:

    • X 部分现在正在工作(正确加载 X 后),但 Y 仍然不正确。我仔细检查了是否正确装载,但仍然没有雪茄。
    猜你喜欢
    • 2016-07-03
    • 2018-11-20
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多