首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MARIE Assembly If-Then

MARIE Assembly If-Then
EN

Stack Overflow用户
提问于 2013-12-08 09:45:39
回答 3查看 13.9K关注 0票数 2

伪码:

代码语言:javascript
复制
if x > 1 then
   y = x + x;
   x = 0;
endif;
   y = y + 1;

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

代码语言:javascript
复制
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?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-08 18:30:58

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

看看SKIPCOND 800是做什么的:How does Skipcond work in the MARIE assembly language?

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

票数 3
EN

Stack Overflow用户

发布于 2018-11-06 22:39:08

我认为他们添加的原因

代码语言:javascript
复制
SUBT ONE 

是因为对于x> 1我们没有跳过条件,但是对于x> 0我们有一个跳过条件,这是

代码语言:javascript
复制
skipcond 800 / meaning X > 0

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

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

票数 1
EN

Stack Overflow用户

发布于 2016-12-09 00:17:43

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

输入

存储TestVal

If,Skipcond 800

跳过其他

然后,Store Y

添加Y

跳转EndIf

否则,加载Y

EndIf,添加X

添加X

商店Z

输出

站住

X,12月5日

年12月2日

Z,十进制0

TestVal,Dec -1

使用说明:

  • 使用“ORG”指令从地址100开始您的程序。
  • 在要求您输入数字时使用您的最后一个大学ID号。例如,如果您的ID为is1415161678532,那么您将使用数字2。

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

c)根据您在b部分中的回答,通过将输出陈述为变量的函数(例如,Output= 3x-2a+y),来阐述在这三种情况下会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20448903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档