assembly 玛丽组装件If-Then

oxf4rvwz  于 2023-06-23  发布在  其他
关注(0)|答案(3)|浏览(172)

伪代码:

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?

t40tm48m

t40tm48m1#

它通过从x中减去1来进行比较,将结果留在累加器中。然后,我们可以使用条件分支来判断AC中的结果值是零、正还是负。
看看SKIPCOND 800是怎么做的:How does Skipcond work in the MARIE assembly language?
与大多数架构不同,在大多数架构中,加/减指令设置标志并进行条件分支测试,玛丽的条件分支指令是测试并分支,如MIPS bgtz / beq with $zero / bltz

mkh04yzy

mkh04yzy2#

我认为他们之所以加

SUBT ONE

是因为x > 1没有跳过条件,但x > 0有跳过条件,即

skipcond 800 / meaning X > 0

既然是这样,我想他们只是从两边减去一,使它们都相等。(x - 1)>(1 - 1)/与(x - 1)> 0相同。从这里,我们可以使用skipcond。
这是我对为什么包括在内的最好的猜测。希望五年后能有所帮助。

igsr9ssn

igsr9ssn3#

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

Input

Store TestVal

If, Skipcond 800

Jump Else

Then, Store Y

Add Y

Jump EndIf

Else, Load Y

EndIf, Add X

Add X

Store Z

Output

Halt

X, Dec 5

Y, Dec 2

Z, Dec 0

TestVal, Dec -1

说明:

  • 使用ORG指令在地址100启动程序。
  • 当系统要求您输入数字时,请使用您上一个大学的ID号。例如,如果您的ID是1415161678532,那么您将使用数字2。

b)假设已经输入了值,比如a。上面的程序中有哪些指令将被执行?你的答案应该解释a <0、a = 0和a> 0的执行流程。
c)根据你在b部分的回答,通过将输出描述为变量的函数,来说明在这三种情况下会发生什么(例如,输出= 3x-2a + y)

相关问题