我无法弄清楚为什么这个MARIE Sim代码无法正常工作

时间:2014-11-04 18:44:31

标签: assembly marie

所以,我在使用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.有人能指出我出错的地方吗?

2 个答案:

答案 0 :(得分:0)

您的错误是使用skipcond的方式和时间。由于您在阅读Y之后立即使用它,因此无论用户输入的是什么,仍然在AC中,因此例如,如果输入4和10,则最终会得到15(10 + 5),然后向右跳到了结束。

您要做的是将X重新加载到AC中,然后使用skipcond进行检查,然后进入逻辑的其余部分。您可能还想使用更多jump来确保您正在执行正确的块。

答案 1 :(得分:0)

请告诉我这是否适合您:

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