Как создать 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 уже имеет верхнее значение в стеке в начале инструкции. Не надо это читать.