IJVM упражнение, меняя 2 элемента в стеке из 4 элементов

Я пытаюсь создать микропрограммированную функцию, которая, учитывая 4 значения в стеке, меняет местами 3 и 4. Я назвал это "mswap", пока это микрокод:

mswap1 SP = SP - 1 mswap2 SP = SP - 1
mswap3 MAR = SP - 1
mswap4 rd mswap5 MAR = H
mswap6 wr mswap7 MAR = SP
mswap8 rd mswap9 MAR = SP - 1 mswap10 wr
mswap11 MAR = H mswap12 rd mswap13 MAR = SP mswap14 wr mswap15 SP = SP + 1 mswap16 SP = SP + 1; goto Main1

И это пример программы:

.основное начало: BIPUSH 0x39 BIPUSH 0x30 BIPUSH 0x36 BIPUSH 0x35 MSWAP OUT OUT OUT HALT .end-main

Он должен выдавать 5690. Грустная правда, на выходе всего 56, то есть, я "пропустил" два элемента стопки. Это из-за чрезмерного использования SP = SP -1? Это работало просто отлично при написании аналогичной функции для замены 2-го и 3-го элемента

1 ответ

mswap5 использует H, но H не был установлен. Вы хотели установить это в более ранней инструкции?

Требуются только два чтения и две записи.

SP не нужно менять для доступа в стек. Используйте H, тогда вам не придется настраивать SP в конце процедуры.

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