2

Pseudocode:

if x > 1 then
   y = x + x;
   x = 0;
endif;
   y = y + 1;

I am tracing the MARIE code below based from the pseudocode:

ORG 100
IF,     LOAD X
        SUBT ONE / What is this for?
        SKIPCOND 800
        JUMP ENDIF
THEN,   LOAD X
        ADD X
        STORE Y
        LOAD ZERO
        STORE X
ENDIF,  LOAD Y
        ADD ONE
        STORE Y
        HALT
X,      DEC ?
Y,      DEC ?
ONE,    DEC 1
ZERO,   DEC 0

Why is the SUBT ONE needed there?

4

3 回答 3

3

它通过从 中减去来进行比较1x将结果留在累加器中。然后,我们可以使用条件分支来判断 AC 中的结果值是零、正还是负。

查找SKIPCOND 800功能:`Skipcond` 在 MARIE 汇编语言中是如何工作的?

与大多数加/减指令设置标志和条件分支测试它们的体系结构不同,MARIE 的条件分支指令是一个测试和分支,如MIPS bgtz/beq$zero/bltz

于 2013-12-08T10:30:58.083 回答
1

我认为他们添加的原因

SUBT ONE 

是因为我们没有 x > 1 的跳过条件,但我们确实有 x > 0 的跳过条件,即

skipcond 800 / meaning X > 0

既然是这样,我认为他们只是从两边减去一个,使它们都相等。(x - 1) > (1 - 1) / 与 (x - 1) > 0 相同。从这里开始,我们可以使用 skipcond。

这是我最有根据的猜测,为什么包括在内。希望这对五年后有所帮助。

于 2018-11-06T14:39:08.390 回答
0

使用 MARIE Simulator 进入并运行以下程序:

输入

存储 TestVal

如果,Skipcond 800

跳转其他

然后,存储 Y

添加 Y

跳转 EndIf

否则,加载 Y

EndIf,添加 X

添加 X

商店 Z

输出

X,12 月 5 日

是的,12 月 2 日

Z,12 月 0 日

测试验证,12 月 -1

指示:

  • 使用“ORG”指令在地址 100 处启动程序。

  • 当您被要求输入数字时,请使用您最后的大学 ID 号。例如,如果您的 ID 是 1415161678532,那么您将使用数字 2。

b) 假设已经输入了值,比如 a。上述程序中将执行的指令是什么?您的答案应该解释 a<0、a=0 和 a>0 的执行流程。

c) 根据您在 b 部分的回答,通过将输出声明为变量的函数(例如,输出 = 3x-2a+y)来表述三种情况下发生的情况

于 2016-12-08T16:17:43.123 回答