Как работает `Skipcond` на ассемблере MARIE? - PullRequest
6 голосов
/ 28 февраля 2011

Я пытаюсь понять язык ассемблера 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

Теперь я знаю, что вычту x из 10 и протестирую с использованием скипакунды.

Я не уверен, какое иЗачем.Думаю, если бы я знал, как они на самом деле работают, возможно, это было бы легче понять.Почему он используется для сравнения с нулем?

Вот что у меня есть:

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

1 Ответ

1 голос
/ 28 февраля 2011
while x < 10 do
    x  = x + 1

выпрыгнет из цикла, как только x станет равным 10. Если вы вычтете 10 из x, вы получите отрицательное значение до тех пор, пока 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.

...