Как создать IUSHR4 на IJVM?

Мне нужно создать расширение MAL. Итак, сначала я попытался добавить на mic1sim.mal

MAR = SP = SP + 1;  rd             // read top of the stack
H = TOS                           // H will be a SP
MDR = H = H >> 1; wr              // SHIFT 1  and write on MDR
MDR = H = H >> 1; wr                 // SHIFT 1 + 1 = 2
MDR = H = H >> 1; wr              // SHIFT 1 + 1 + 1 = 3
MDR = H = H >> 1: wr              // 4th shift
TOS = MDR; goto Main1             // TOS updated

Но не работает! Может кто-нибудь объяснить мне, где я не прав?

1 ответ

SP указывает на вершину стека. SP + 1 указывает на данные, которых больше нет в стеке. Чтение этого значения вернет мусор. У вас есть условие, при котором два разных значения записываются в MDR в третьей инструкции: результат операции ALU и данные из памяти из чтения в первой инструкции.

Не нужно писать после каждой смены. Вычислите результат в H. Когда закончите, сохраните значение H в MDR и запишите это значение в стек.

TOS уже имеет верхнее значение в стеке в начале инструкции. Не надо это читать.

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