伪代码:
if x > 1 then
y = x + x;
x = 0;
endif;
y = y + 1;
我从伪代码中跟踪了下面的玛丽代码:
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?
3条答案
按热度按时间t40tm48m1#
它通过从
x
中减去1
来进行比较,将结果留在累加器中。然后,我们可以使用条件分支来判断AC中的结果值是零、正还是负。看看
SKIPCOND 800
是怎么做的:How doesSkipcond
work in the MARIE assembly language?与大多数架构不同,在大多数架构中,加/减指令设置标志并进行条件分支测试,玛丽的条件分支指令是测试并分支,如MIPS
bgtz
/beq
with$zero
/bltz
mkh04yzy2#
我认为他们之所以加
是因为x > 1没有跳过条件,但x > 0有跳过条件,即
既然是这样,我想他们只是从两边减去一,使它们都相等。(x - 1)>(1 - 1)/与(x - 1)> 0相同。从这里,我们可以使用skipcond。
这是我对为什么包括在内的最好的猜测。希望五年后能有所帮助。
igsr9ssn3#
使用MARIE模拟器进入并运行以下程序:
说明:
ORG
指令在地址100启动程序。b)假设已经输入了值,比如a。上面的程序中有哪些指令将被执行?你的答案应该解释a <0、a = 0和a> 0的执行流程。
c)根据你在b部分的回答,通过将输出描述为变量的函数,来说明在这三种情况下会发生什么(例如,输出= 3x-2a + y)