assembly 在玛丽汇编语言中,'Skipcond'是如何工作的?

bis0qfac  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(448)

我正在努力理解玛丽汇编语言,但我不太理解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,然后使用skipcond进行测试。
我不知道是哪一个,为什么。我想如果我知道它们是如何真正工作的,也许会更容易理解。为什么用它来比较零?
这就是我所拥有的:

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

kulphzqa1#

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循环相同的行为。

b1zrtrql

b1zrtrql2#

这可能会有帮助。有很多种方法可以写这个,但我认为这是理解循环中发生的事情的最简单的方法。注意:通常变量被放在程序的底部。
第一个

相关问题