MARIE Ассамблея Если-Тогда

Псевдокод:

if x > 1 then
   y = x + x;
   x = 0;
endif;
   y = y + 1;

Я отслеживаю код MARIE ниже на основе псевдокода:

ORG 100
IF,     LOAD X
        SUBT ONE / What is this for?
        SKIPCOND 800
        JUMP ENDIF
THEN,   LOAD X
        ADD X
        STORE Y
        LOAD ZERO
        STORE X
ENDIF,  LOAD Y
        ADD ONE
        STORE Y
        HALT
X,      DEC ?
Y,      DEC ?
ONE,    DEC 1
ZERO,   DEC 0

Зачем нужен СУБТ ОДИН?

3 ответа

Решение

Это делает сравнение вычитая 1 от x оставив результат в аккумуляторе. Затем мы можем использовать условную ветвь относительно того, является ли результирующее значение в AC нулевым, положительным или отрицательным.

Посмотри что SKIPCOND 800 Как: `Skipcond` работает на ассемблере MARIE?

В отличие от большинства архитектур, в которых команды сложения / вычитания устанавливают флаги, а условные ветви проверяют их, инструкция условного перехода MARIE является тестовой ветвью, как и MIPS bgtz / beq с $zero / bltz

Я думаю, что причина они добавляют

SUBT ONE 

потому что у нас нет условия пропуска для x > 1, но у нас есть условие пропуска для x > 0, что

skipcond 800 / meaning X > 0

Поскольку это так, я думаю, что они просто вычли один с обеих сторон, делая их обоих равными. (x - 1) > (1 - 1) / так же, как (x - 1) > 0. отсюда, мы можем использовать skipcond.

Это мое лучшее обоснованное предположение, почему это включено. Надеюсь, это поможет пять лет спустя.

Используйте MARIE Simulator для входа и запуска следующей программы:

вход

Магазин TestVal

Если Skipcond 800

Прыгать остальное

Затем магазин Y

Добавить Y

Jump EndIf

Иначе, Load Y

EndIf, добавить X

Добавить X

Store Z

Выход

стой

X, 5 декабря

2 декабря

Z, Dec 0

TestVal, Dec -1

инструкции:

  • Используйте инструкцию "ORG" для запуска вашей программы по адресу 100.

  • Используйте свой последний идентификационный номер университета, когда вас попросят ввести номер. Например, если ваш идентификатор 1414161678532, то вы будете использовать номер 2.

б) Предположим, что значение, скажем, а, было введено. Каковы инструкции в вышеупомянутой программе, которая будет выполнена? Ваш ответ должен объяснить ход выполнения для<0, a=0 и a>0.

c) Основываясь на своем ответе в части b, сформулируйте, что происходит в трех случаях, указав выходные данные как функцию переменных (например, Output= 3x-2a+y)

Другие вопросы по тегам