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 в конце процедуры.