伪码:
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?
发布于 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一样
发布于 2018-11-06 22:39:08
我认为他们添加的原因
SUBT ONE 是因为对于x> 1我们没有跳过条件,但是对于x> 0我们有一个跳过条件,这是
skipcond 800 / meaning X > 0既然是这样,我想他们只是从两边减去一个,使它们都相等。(x - 1) > (1 - 1) /与(x - 1) > 0相同。在这里,我们可以使用skipcond。
这是我最有根据的猜测,为什么会包括这一点。希望这能在五年后有所帮助。
发布于 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
使用说明:
b)假设已经输入了值,例如a。上面程序中将要执行的指令是什么?您的回答应该解释a<0、a=0和a>0的执行流程。
c)根据您在b部分中的回答,通过将输出陈述为变量的函数(例如,Output= 3x-2a+y),来阐述在这三种情况下会发生什么。
https://stackoverflow.com/questions/20448903
复制相似问题