【问题标题】:MARIE Assembly If-Then玛丽组装如果-那么
【发布时间】:2013-12-08 01:45:38
【问题描述】:

伪代码:

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

我正在根据伪代码跟踪下面的 MARIE 代码:

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

为什么需要SUBT ONE?

【问题讨论】:

  • 另请参阅 MARIE Assembly if else 了解详细指南,了解 if 的逻辑以及如何通过条件跳转(如 SKIPCOND over a JUMP)映射到 if()goto

标签: if-statement assembly marie


【解决方案1】:

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

查看SKIPCOND 800 做了什么:How does `Skipcond` work in the MARIE assembly language?

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

【讨论】:

  • 与许多其他汇编语言/ISA 不同,MARIE 没有标志。它更像是 MIPS,其中 SKIPCOND 是 AC 上的测试和分支。由于我们在 SUBT 结果上使用它,所以测试 SUBT 结果的逻辑是正确的,但机制解释错误。 (How does Skipcond work in the MARIE assembly language?)。我决定继续编辑答案以修复它。
【解决方案2】:

我认为他们添加的原因

SUBT ONE 

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

skipcond 800 / meaning X > 0

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

对于为什么包含它,这是我最有根据的猜测。希望五年后能有所帮助。

【讨论】:

【解决方案3】:

使用MARIE模拟器进入并运行以下程序:

输入

存储测试值

如果,Skipcond 800

跳转其他

那么,存储Y

添加 Y

如果结束就跳转

否则,加载 Y

EndIf,加 X

添加 X

商店Z

输出

暂停

X,12 月 5 日

Y,12 月 2 日

Z,12 月 0 日

TestVal,12 月 -1

说明:

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

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

b) 假设已经输入了值,比如 a。里面的说明是什么 上面的程序会被执行吗?你的回答应该解释流程 a0 的执行次数。

c) 根据你在 b 部分的回答,制定在这三种情况下发生的情况,由 将输出声明为变量的函数(例如,Output= 3x-2a+y)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多