MARIE代码if和else条件都被执行

时间:2017-04-27 16:08:08

标签: assembly marie

我被要求做以下事情:

编写MARIE代码以执行以下程序摘录。

If (x < y + z) {
x = x – y; z=z+1;
}
else y=y-1;

说明: - 使用“ORG”指令在地址200处启动程序。 - 程序结束时应包含以下标签和指令:

X, Dec 4
Y, Dec 2
Z, Dec 5
One, Dec 1

我写了这个:

ORG 200 
Load X
Subt Y
Subt Z
Skipcond 000
Jump Else
If, Load X
Subt Y
Output
Load Z
Add One
Output
Else, Load Y
Subt One
Output
Halt

X, DEC 4
Y, DEC 2
Z, DEC 5
One, DEC 1

我的代码可以执行if和else条件。这是为什么?我该如何解决?我写的代码是正确的吗?

1 个答案:

答案 0 :(得分:0)

为什么? 代码执行if和else条件,因为在If块的末尾需要JUMP指令移动到if语句的末尾。

如何解决?

在:

If, Load X
    Subt Y
    Output
    Load Z
    Add One
    Output
Else, Load Y
    Subt One
    Output
    Halt

后:

If, Load X
    Subt Y
    Output
    Load Z
    Add One
    Output
    JUMP END
Else,   Load Y
    Subt One
    Output
END,    Halt

我写的代码是否正确? 您需要在内存中存储X Y和Z的值,因此您需要将OUTPUT指令替换为相应的STORE指令,如下所示:

    / Code Section
    ORG 200 
    Load X
    Subt Y
    Subt Z
    Skipcond 000
    Jump Else
If, Load X
    Subt Y
    STORE X
    Load Z
    Add One
    STORE Z
    JUMP END
Else,   Load Y
    Subt One
    STORE Y
END,    Halt
    / Data Section
X,  DEC 4
Y,  DEC 2
Z,  DEC 5
One,    DEC 1

The result for the Marie simulator running the above program