“Skipcond”如何在MARIE汇编语言中工作?

时间:2011-02-27 23:35:43

标签: assembly pseudocode marie

我正在尝试理解MARIE汇编语言。我不太明白skipcond<>,或乘以或除。

我正在接受这个简单的程序:

x = 1
while x < 10 do
x  = x +1
endwhile;

我不明白的是如何使用某些跳过条件:

Skipcond 800 if AC > 0,
Skipcond 400 if AC = 0,
Skipcond 000 if AC < 0

现在,我知道我会从10减去x并使用跳秒进行测试。

我不确定是哪一个以及为什么。我想如果我知道它们真的有用,也许它会更容易理解。为什么它用于比较为零?

这就是我所拥有的:

100     load one
101     store x
102     subt ten
103     skipcond400  if x-10 = 0?   // or skpcond000 x -10 < 0?? 

1 个答案:

答案 0 :(得分:1)

while x < 10 do
    x  = x + 1
一旦x等于10,

就会跳出循环。如果从x中减去10,你将得到一个负值,直到x等于10(并且值为0)。因此使用skpcond000会出错,因为它会很快跳出来。所以skpcond400是正确的。

如果您更改C代码以便更接近汇编代码,也许更容易理解:

Original:            while (x < 10) do
Subtract 10:         while ((x - 10) < 0) do
Use != instead of <: while ((x - 10) != 0) do

另请注意,您必须在条件之后增加x ,才能重现与while循环相同的行为。