Код MARIE, если выполняются условия

Меня попросили сделать следующее:

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

If (x < y + z) {
x = x – y; z=z+1;
}
else y=y-1;

Инструкции: - Используйте инструкцию "ORG", чтобы запустить вашу программу по адресу 200. - В конце вашей программы должны быть указаны следующие ярлыки и директивы:

X, Dec 4
Y, Dec 2
Z, Dec 5
One, Dec 1

и я написал это:

ORG 200 
Load X
Subt Y
Subt Z
Skipcond 000
Jump Else
If, Load X
Subt Y
Output
Load Z
Add One
Output
Else, Load Y
Subt One
Output
Halt

X, DEC 4
Y, DEC 2
Z, DEC 5
One, DEC 1

мой код оправдывает условия if и else. Это почему? и как я могу это исправить? код, который я написал правильно?

1 ответ

Это почему? Код выполняет условия if и else, потому что в конце блока If необходимо, чтобы инструкция JUMP переместилась в конец оператора if.

Как это исправить?

До:

If, Load X
    Subt Y
    Output
    Load Z
    Add One
    Output
Else, Load Y
    Subt One
    Output
    Halt

После:

If, Load X
    Subt Y
    Output
    Load Z
    Add One
    Output
    JUMP END
Else,   Load Y
    Subt One
    Output
END,    Halt

Код, который я написал правильно? Вам необходимо сохранить в памяти значения X Y и Z, поэтому вам нужно заменить инструкцию OUTPUT соответствующей инструкцией STORE следующим образом:

    / Code Section
    ORG 200 
    Load X
    Subt Y
    Subt Z
    Skipcond 000
    Jump Else
If, Load X
    Subt Y
    STORE X
    Load Z
    Add One
    STORE Z
    JUMP END
Else,   Load Y
    Subt One
    STORE Y
END,    Halt
    / Data Section
X,  DEC 4
Y,  DEC 2
Z,  DEC 5
One,    DEC 1

Результат для симулятора Мари с запущенной выше программой

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