|
|
Учебная модель ЭВМ: кодирование команд
Способы адресации
| Код ТА | Тип адресации | Исполнительный адрес |
| 0 | Прямая (регистровая) | ADR (R) |
| 1 | Непосредственная | — |
| 2 | Косвенная | O3У(ADR)[3:5] |
| 3 | Относительная | ADR + RB |
| 4 | Косвенно-регистровая | POH(R)[3:5] |
| 5 | Индексная с постинкрементом |
POH(R)[3:5], R:= R + l |
| 6 | Индексная с преддекрементом |
R:= R – l, POH(R)[3:5] |
Таблица команд
\Ст. \ Мл.\ |
0 | 1 | 2 |
3 | 4 |
| 0 | NOP | JMP |
| MOV | |
| 1 | IN | JZ |
RD | RD | RDI |
| 2 | OUT | JNZ |
WR | WR | |
| 3 | IRET | JS |
ADD | ADD | ADI |
| 4 | WRRB | JNS |
SUB | SUB | SBI |
| 5 | WRSP | JO |
MUL | MUL | MULI |
| 6 | PUSH | JNO |
DIV | DIV | DIVI |
| 7 | POP | JRNZ |
| IN | |
| 8 | RET | INT |
EI | OUT | |
| 9 | HLT | CALL |
DI | | |
Мнемокоды команд и соответствующие им машинные коды операций. Старшая цифра кода – номер столбца,
младшая – номер строки. Команды столбца 2 относятся к операциям с ячейками ОЗУ,
а подобные команды столбца 3 – к операциям с РОН. Команды столбца 4 имеют
формат 4 (двойную длину). Полное описание команд, упорядоченных по коду
операций, приведено в таблице
Таблица команд, упорядоченная по кодам операций:
| КОП | Мнемо- код | Название | Действие |
| 00 | NOP | Пустая операция |
Нет |
| 01 | IN | Ввод |
Acc <== IR |
| 02 | OUT | Вывод |
OR <== Acc |
| 03 | IRET | Возврат из прерывания |
FLAGS.PC <== M(SP); INC(SP) |
| 04 | WRRB | Загрузка RB |
RB <== CR[ADR] |
| 05 | WRSP | Загрузка SP |
SP <== CR[ADR] |
| 06 | PUSH | Поместить в стек |
DEC(SP); M(SP) <== R |
| 07 | POP | Извлечь из стека |
R <== M(SP); INC(SP) |
| 08 | RET | Возврат |
PC <== M(SP); INC(SP) |
| 09 | HLT | Стоп |
Конец командных циклов |
| 10 | JMP | Безусловный переход |
PC <== CR[ADR] |
| 11 | JZ | Переход, если 0 |
if Acc = 0 then PC <== CR[ADR] |
| 12 | JNZ | Переход, если не 0 |
if Acc ≠ 0 then PC <== CR[ADR] |
| 13 | JS | Переход, если отрицательно |
if Acc < 0 then PC <== CR[ADR] |
| 14 | JNS | Переход, если неотрицательно |
if Acc ≥ 0 then PC <== CR[ADR] |
| 15 | JO | Переход, если переполнение |
if |Acc| > 99999 then PC <== CR[ADR] |
| 16 | JNO | Переход, если нет переполнения |
if |Acc| ≤ 99999 then PC <== CR[ADR] |
| 17 | JRNZ | Цикл |
DEC(R); if R ≠ 0 then PC <== CR[ADR] |
| 18 | INT | Программное прерывание |
DEC(SP); M(SP) <== FLAGS.PC; PC <== M(V) |
| 19 | CALL | Вызов подпрограммы |
DEC(SP); M(SP) <== PC; PC <== CR(ADR) |
| 20 | Нет | |
|
| 21 | RD | Чтение |
Acc <== DD |
| 22 | WR | Запись |
M(*) <== Acc |
| 23 | ADD | Сложение |
Acc <== Acc + DD |
| 24 | SUB | Вычитание |
Acc <== Acc – DD |
| 25 | MUL | Умножение |
Acc <== Acc x DD |
| 26 | DIV | Деление |
Acc <== Acc/DD |
| 27 | Нет | |
|
| 28 | EI | Разрешить прерывание |
IF <== 1 |
| 29 | DI | Запретить прерывание |
IF <== 0 |
| 30 | MOV | Пересылка |
R1 <== R2 |
| 31 | RD | Чтение |
Acc <== R* |
| 32 | WR | Запись |
R* <== Acc |
| 33 | ADD | Сложение |
Acc <== Acc + R* |
| 34 | SUB | Вычитание |
Acc <== Acc – R* |
| 35 | MUL | Умножение |
Acc <== Acc x R* |
| 36 | DIV | Деление |
Acc <== Acc/R* |
| 37 | IN | Ввод |
Acc <== ВУ(CR[ADR*]) |
| 38 | OUT | Вывод |
ВУ(CR[ADR*]) <== Acc |
| 39 | Нет | | |
| 40 | Нет | | |
| 41 | RDI | Чтение |
Acc <== I |
| 42 | Нет | | |
| 43 | ADI | Сложение |
Acc <== Acc + I |
| 44 | SBI | Вычитание |
Acc <== Acc –& I |
| 45 | MULI | Умножение |
Acc <== Acc x I |
| 46 | DIVI | Деление |
Acc <== Acc/I |
В таблице приняты следующие обозначения:
Acc – аккумулятор
PC – счётчик команд
SP – указатель стека
RB – регистр базы
IR – регистр ввода
OR – регистр вывода
FLAGS – вектор флагов: IF,OV,S,Z
IF - флаг разрешения прерывания
DD – данные, формируемые командой в качестве (второго) операнда:
прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд;
R – содержимое регистра общего назначения (РОН)
R* – содержимое РОН или косвенно адресуемой через регистр ячейки
памяти;
M( ) – содержимое ячейки памяти
M(*) – содержимое ячейки памяти, прямо или косвенно адресуемой в команде;
CR – регистр команды
CR[ADR] – трёхразрядное поле ADR регистра CR;
CR[ADR*] – два младших разряда поля ADR регистра CR;
V – адрес памяти, соответствующий вектору прерывания;
I – пятиразрядный непосредственный операнд со знаком.
© Жмакин Анатолий Петрович (Курский государственный
университет). anatoly.zhmakin@gmail.com
Оформление Web-страницы - Е.А.Еремин, 2010
|