1. ホーム
  2. assembly

[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?

2022-02-21 18:30:10

質問内容

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 を引き、skipcond を使ってテストすることは分かっています。

どれがどうしてなのか、よくわかりません。もし、本当の仕組みを知っていたら、もっと簡単に理解できたかもしれません。なぜゼロと比較するために使われるのですか?

これは私が持っているものです。

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

解決方法は?

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 のループになります。