2016-01-13 2 views
1

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

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

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

.main старт: BIPUSH 0x39 BIPUSH 0x30 BIPUSH 0x36 BIPUSH 0x35 MSWAP OUT выход OUT OUT HALT .end-Главный

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

ответ

0

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

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

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

+0

Спасибо, ваше предложение действительно помогло, я вернул эту инструкцию, наконец, –

+0

@Davide Piccinelli: Нет проблем. Как насчет голосования до ответа ??? – downeyt

+0

Конечно :) Я думал, что уже сделал, на сайте, вероятно, было немного проблем вчера –

Смежные вопросы