В данном разделе представлены вспомогательные таблицы (табл. 8.4 — 8.8) для работы с моделью учебной ЭВМ.
Таблица 8.4. Таблица команд учебной ЭВМ
Мл\Ст.
|
|
|
|
|
|
| NOP
| JMP
|
| MOV
|
|
| IN
| JZ
| RD
| RD
| RDI
|
| OUT
| JNZ
| WR
| WR
|
|
| IRET
| JS
| ADD
| ADD
| ADI
|
| WRRB
| JNS
| SUB
| SUB
| SBI
|
| WRSP
| JO
| MUL
| MUL
| MULI
|
| PUSH
| JNO
| DIV
| DIV
| DIVI
|
| POP
| JRNZ
|
| IN
|
|
| RET
| INT
| EI
| OUT
|
|
| HLT
| CALL
| DI
|
|
|
Таблица 8.5. Типы адресации, их коды и обозначение
Обозначение
| Код
| Тип адресации
| Пример команды
|
|
| Прямая (регистровая)
| ADD 23 (ADD R3)
|
#
|
| Непосредственная
| ADD #33
|
@
|
| Косвенная
| add @33
|
(Страница262)
Таблица 8, 5 (окончание)
Обозначение
| Код
| Тип адресации
| Пример команды
|
[ ]
|
| Относительная
| ADD [33]
|
@R
|
| Косвенно-регистровая
| ADD @R3
|
@R+
|
| Индексная с постинкрементом
| ADD @R3+
|
- @R
|
| Индексная с преддекрементом
| ADD - @R3
|
В табл. 8.6 приняты следующие обозначения:
□ DD — данные, формируемые командой в качестве (второго) операнда: прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд;
□ R* — содержимое регистра или косвенно адресуемая через регистр ячейка памяти;
□ ADR* — два младших разряда ADR поля регистра CR;
□ V — адрес памяти, соответствующий вектору прерывания;
□ M(*) — ячейка памяти, прямо или косвенно адресуемая в команде;
□ I — пятиразрядный непосредственный операнд со знаком.
Таблица 8.6. Система команд учебной ЭВМ
КОП
| Мнемокод
| Название
| Действие
|
| NOP
| Пустая операция
| Нет
|
| IN
| Ввод
| Acc ← IR
|
| OUT
| Вывод
| OR ←Асc
|
| IRET
| Возврат из прерывания
| FLAGS.PC ← M(SP); INC(SP)
|
| WRRB
| Загрузка RB
| RB ← CR[ADR]
|
| WRSP
| Загрузка SP
| SP ← CR[ADR]
|
| PUSH
| Поместить в стек
| DEC(SP); M(SP) ← R
|
| POP
| Извлечь из стека
| R → M(SP); INC(SP)
|
| RET
| Возврат
| PC → M(SP); INC(SP)
|
| HLT
| Стоп
| Конец командных циклов
|
| JMP
| Безусловный переход
| PC ← CR[ADR]
|
| JZ
| Переход, если 0
| if Acc=then PC ← CR[ADR]
|
Таблица 8.6 (продолжение)
КОП
| Мнемокод
| Название
| Действие
|
| JNZ
| Переход, если не 0
| if Асc Ф 0 then PC ← CR[ADR]
|
| JS
| Переход, если отрицательно
| if Асc<0 then PC ← CR[ADR]
|
| JNS
| Переход, если положительно
| if Acc<0 then PC ← CR[ADR]
|
| JO
| Переход, если переполнение
| if |Acc|>99999 then PC ← CR[ADR]
|
| JNO
| Переход, если нет переполнения
| if |Acc|<99999 then PC ← CR[ADR]
|
| JRNZ
| Цикл
| DEC(R); if R>0 then PC ← CR[ADR]
|
| INT
| Программное прерывание
| DEC(SP); M(SP) ← FLAGS.PC; PC ← M(V)
|
| CALL
| Вызов подпрограммы
| DEC(SP); M(SP) ← PC; PC ← CR(ADR)
|
| Нет
|
|
|
| RD
| Чтение
| Acc ← DD
|
| WR
| Запись
| M(*) ← Acc
|
| ADD
| Сложение
| Acc 4 - Acc+DD
|
| SUB
| Вычитание
| Acc ← Acc - DD
|
| MUL
| Умножение
| Acc ← Acc x DD
|
| DIV
| Деление
| Acc←Acc/DD
|
| Нет
|
|
|
| EI
| Разрешить прерывание
| IF ←1
|
| DI
| Запретить прерывание
| IF ←0
|
| MOV
| Пересылка
| R1←R2
|
| RD
| Чтение
| Acc ← R*
|
| WR
| Запись
| R* ← Acc
|
| ADD
| Сложение
| Acc ← Acc+R*
|
| SUB
| Вычитание
| Acc ← Acc — R*
|
| MUL
| Умножение
| Acc ← Acc x R*
|
| DIV
| Деление
| Acc ← Acc/R*
|
| IN
| Ввод
| Acc ← By(CR[ADR*])
|
Таблица 8.6 (окончание)
КОП
| Мнемокод
| Название
| Действие
|
| OUT
| Вывод
| BY(CR[ADR*]) ← Асе
|
| Нет
|
|
|
| Нет
....
|
|
|
| RDI
| Чтение
| Acc ←I
|
| Нет
|
|
|
| ADI
| Сложение
| Acc ←Асc+I
|
| SBI
| Вычитание
| Acc ← Асc - I
|
| MULI
| Умножение
| Acc ← Асc x I
|
| DIVI
| Деление
| Acc ← Асс/I
|
Таблица 8.7. Таблица кодов ASCII (фрагмент)
Таблица 8.8. Перевод НЕХ-кодов в десятичные числа