Пытаюсь понять, как работает симулятор Мари

#marie

Вопрос:

Я пытаюсь понять, как создать базовую программу в симуляторе, вот псевдокод

 input A
input B

if A < B:
   x = A   B

else:
   x = A - B
 

порывшись в Интернете, я пришел к такому выводу

 INPUT
store A
INPUT
store B
if, load A
add B
store X
else, load A
subt B
store X
OUTPUT
Halt
A, DEC 0
B, DEC 0
X, DEC 0
Y, DEC 0
 

кто-нибудь может помочь мне разобраться в правильном и рабочем коде?

Ответ №1:

Оператор if разбивается на условие-тест, затем-часть и еще-часть.

У вас есть код для тогдашней части и еще части, но не для теста условий.

Цель проверки условия состоит в том, чтобы выбрать одну из частей «тогда» и «еще». Мы также хотим убедиться, что выполняется только один из них, поэтому при необходимости предотвращайте выполнение другого.

Способ выполнения условного теста заключается в использовании условного ветвления. Смысл условного ветвления состоит в том, чтобы пропустить вперед, если условие ложно, чтобы избежать последующей части, когда условие ложно, но выполнить последующую часть, когда условие истинно.

В C используется стиль сборки if-goto-label:

     if ( condition is false ) goto elsePartOfIf1;
    <then-part>
    goto endOfIf1;
elsePartOfIf1:
    <else-part>
endOfIf1:
 

Таким образом, проверяется условие, и если условие ложно, то переходите к другой части оператора if, пропуская часть then. В другом случае (условие верно) мы хотим не перейти к другой части, а вместо этого просто приступить к выполнению следующей части. После части then мы должны пропустить часть else, чтобы перейти к следующему оператору после оператора if, который должен выполняться следующим независимо от того, выполнена ли часть then или другая часть.

Чтобы выполнить проверку условий в MARIE, вы можете вычесть операнды и проверить знак результата. Другими словами, мы можем перевести A < B в A - B < 0 , вычитая B из обеих сторон < отношения. Это вычитание легко выполнить, и < 0 его можно выполнить с SkipCond помощью инструкции MARIE. Здесь, в StackOverflow, есть и другие ответы, которые будут более непосредственно касаться использования SkipCond инструкции МАРИ.