#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
инструкции МАРИ.