1

我被要求做以下事情:

编写 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 条件。这是为什么?我该如何解决?我写的代码正确吗?

4

1 回答 1

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

我写的代码正确吗?您需要将 XY 和 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

Marie 模拟器运行上述程序的结果

于 2017-05-16T14:09:26.760 回答