При рассмотрении системы команд ЭВМ обычно анализируют три аспекта: форматы, способы адресации и систему операций.
Большинство команд учебной ЭВМ является одноадресными или безадресными, длиной в одно машинное слово (6 разрядов). Исключение составляют двухсловные команды с непосредственной адресацией и команда MOV, являющаяся двухадресной.
В форматах команд выделяют 3 поля:
1) два старших разряда [0:1] определяют код операции СОР;
2) разряд 2 определяет тип адресации ADR;
3) разряды [3:5] определяют номер ячейки памяти (регистра).
В модели учебной ЭВМ реализованы пять основных способа адресации: прямая, косвенная, непосредственная, относительная и безадресная. Обозначения и коды, соответствующие этим способам адресации представлены в табл. 2.1.
Таблица 2.1.
Таблица команд учебной ЭВМ
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.2.
Типы адресации, их коды и обозначение
Тип адресации | Обозн. | Код | Пример команды |
Прямая (прямая регистровая) | 0 | ADD 23 (ADD R4) | |
Непосредственная | # | 1 | ADD #23 |
Косвенная | @ | 2 | ADD @23 |
Относительная | [ ] | 3 | ADD [23] |
Косвенная регистровая | @R | 4 | ADD @R4 |
Индексная с постинкрементом | @R+ | 5 | ADD @R4+ |
Индексная с преддекрементом | –@R | 6 | ADD –@R4 |
Таблица 2.3.
Система команд учебной ЭВМ
СОР | Мнемокод | Название | Действие |
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 |
Продолжение табл. 2.3. | |||
07 | POP | Извлечь из стека | INC(SP); M(SP) ← R |
08 | RET | Возврат | INC(SP); M(SP) ← PC |
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 × 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 × R* |
36 | DIV | Деление | Acc ← Acc/R* |
37 | IN | Ввод | Acc ← ВУ(CR[ADR*]) |
38 | OUT | Вывод | |
39 | Нет | ||
40 | Нет | ||
41 | RDI | Чтение | Acc ← I |
42 | Нет | ||
43 | ADI | Сложение | Acc ← Acc + I |
44 | SBI | Вычитание | Acc ← Acc – I |
45 | MULI | Умножение | Acc ← Acc × I |
46 | DIVI | Деление | Acc ← Acc/I |
В табл. 2.3. приняты следующие обозначения:
• DD – данные, формируемые командой в качестве второго операнда (прямо или косвенно адресуемая ячейка памяти или трехразрядный непосредственный операнд);
• R(*) – содержимое регистра (косвенно адресуемая через регистр ячейка памяти);
• М(*) – ячейка памяти, прямо (косвенно) адресуемая в команде;
• I – пятиразрядный непосредственный операнд со знаком;
• V – адрес памяти, соответствующий вектору прерывания;
• CR[ADR] – адрес или непосредственный операнд в регистре команд (CR)