Интерпретатор базовой ЭВМ
Полный текст микропрограммы (интерпретатора команд) приведен в табл. 3.2. В этой таблице есть один “лишний” столбец (ВЕРТ.), содержание которого будет описано ниже.
Первые микрокоманды интерпретатора служат для выборки команды из основной памяти (ОП) базовой ЭВМ и определения ее типа: адресная, безадресная или ввода-вывода. Для этого содержимое СК (в котором хранится адрес исполняемой команды) пересылается через БР в РА (СК=>БР и БР=>РА). Затем из ячейки ОП, на которую указывает РА, пересылается в РД команда, а содержимое СК увеличивается на единицу и пересылается в БР: ОП(РА)=>РД, СК+1=>БР.
Таблица 3.2 - Интерпретатор базовой ЭВМ (микропрограмма)
Адрес | Микрокоманды | Комментарии | ||
---|---|---|---|---|
Горизонт. | Верт. | Метка | Действие | |
1 | 2 | 3 | 4 | 5 |
Цикл выборки команды | ||||
01 | 0000 0008 | 0300 | нач | СК ==> БР |
02 | 0004 0000 | 4001 | БР ==> РА | |
03 | 0080 0408 | 0311 | ОП(РФ) ==> РД, СК + 1 ==> БР | |
04 | 0020 0000 | 4004 | БР ==> СК | |
05 | 0000 0002 | 0100 | РД ==> БР | |
06 | 0010 0000 | 4003 | БР ==> РК | |
Определение типа команды | ||||
07 | 880C 8000 | AF0C | IF BIT(15,PK) = 0 THEN АДЦ(0C) | |
08 | 880C 4000 | AE0C | IF BIT(14,PK) = 0 THEN АДЦ(0C) | |
09 | 880C 2000 | AD0C | IF BIT(13,PK) = 0 THEN АДЦ(0C) | |
0A | 895E 1000 | EC5E | IF BIT(12,PK) = 1 THEN БАД(5Е) | |
0B | 828E 0008 | 83BE | GOTO B/B(8E) | |
Определение вида адресации | ||||
0C | 881D 0800 | AB1D | АДЦ | IF BIT(11,PK) = 0 THEN АДР(1D) |
Цикл выборки адреса операнда | ||||
0D | 0000 0002 | 0100 | РД ==> БР | |
0E | 0004 0000 | 4001 | БР ==> РА | |
0F | 0080 0000 | 0001 | ОП(РА) ==> РД | |
10 | 881D 0008 | A31D | IF BIT(3,PK) = 0 THEN АДР(1D) | |
11 | 891D 0010 | E41D | IF BIT(4,PK) = 1 THEN АДР(1D) | |
12 | 891D 0020 | E51D | IF BIT(5,PK) = 1 THEN АДР(1D) | |
13 | 891D 0040 | E61D | IF BIT(6,PK) = 1 THEN АДР(1D) | |
14 | 891D 0080 | E71D | IF BIT(7,PK) = 1 THEN АДР(1D) | |
15 | 891D 0100 | E81D | IF BIT(8,PK) = 1 THEN АДР(1D) | |
16 | 891D 0200 | E91D | IF BIT(9,PK) = 1 THEN АДР(1D) | |
17 | 891D 0400 | EA1D | IF BIT(10,PK) = 1 THEN АДР(1D) | |
18 | 0000 0402 | 0110 | РД ==> БР | |
19 | 0008 0000 | 4002 | БР ==> РД | |
1A | 0100 0000 | 0002 | РД ==> ОП(РА) | |
1B | 0000 0082 | 0140 | РД + СОМ(0) = РД - 1 ==> БР | |
1C | 0008 0000 | 4002 | БР ==> РД | |
Цикл исполнения адресных команд | ||||
Декодирование адресных команд | ||||
1D | 892D 8000 | EF2D | АДР | IF BIT(15,PK) = 1 THEN ПРХ(2D) |
1E | 0000 0002 | 0100 | РД ==> БР | |
1F | 0004 0000 | 4001 | БР ==> РА | |
20 | 8927 4000 | EE27 | IF BIT(14,PK) = 1 THEN АРФ(27) | |
21 | 8824 2000 | AD24 | IF BIT(13,PK) = 0 THEN A1(24) | |
22 | 8857 1000 | AC57 | IF BIT(12,PK) = 0 THEN JSR(57) | |
23 | 8238 0008 | 8338 | GOTO MOV(38) | |
24 | 0080 0000 | 0001 | A1 | ОП(РА) ==> РД |
25 | 8850 1000 | AC50 | IF BIT(12,PK) = 0 THEN ISZ(50) | |
26 | 8235 0008 | 8335 | GOTO AND(35) | |
27 | 0080 0000 | 0001 | АРФ | ОП(РА) ==> РД |
28 | 882B 2000 | AD2B | IF BIT(13,PK) = 0 THEN СУМ(2B) | |
29 | 8843 1000 | AC43 | IF BIT(12,PK) = 0 THEN SUB(43) | |
2A | 82B0 0008 | 83B0 | GOTO P - A(B0) | |
2B | 883C 1000 | AC3C | СУМ | IF BIT(12,PK) = 0 THEN ADD(3C) |
2C | 823F 0000 | 833F | GOTO ADC(3F) | |
2D | 8830 4000 | AE30 | ПРХ | IF BIT(14,PK) = 0 THEN УПХ(30) |
2E | 8847 1000 | AC47 | IF BIT(12,PK) = 0 THEN BR(47) | |
2F | 82D0 0008 | 83D0 | GOTO Р - П(D0) | |
30 | 8833 2000 | AD33 | УПХ | IF BIT(13,PK) = 0 THEN П1(33) |
31 | 884С 1000 | AC4C | IF BIT(12,PK) = 0 THEN BMI(4C) | |
32 | 824E 0008 | 834E | GOTO BEQ(4E) | |
33 | 8846 1000 | AC46 | П1 | IF BIT(12,PK) = 0 THEN BCS(46) |
34 | 824A 0008 | 834A | GOTO BPL(4A) | |
Исполнение адресных команд | ||||
35 | 0000 0212 | 1120 | AND | A & РД ==> БР |
36 | 0040 C000 | 4035 | БР ==> A, N, Z | |
37 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
38 | 0000 0010 | 1000 | MOV | A ==> БР |
39 | 0008 0000 | 4002 | БР ==> РД | |
3A | 0100 0000 | 0002 | РД ==> ОП(РА) | |
3B | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
3C | 0000 0012 | 1100 | ADD | A + РД ==> БР |
3D | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
3E | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
3F | 823C 0001 | 803C | ADC | IF BIT(0,PC) = 0 THEN ADD(3C) |
40 | 0000 0412 | 1110 | A + РД + 1 ==> БР | |
41 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
42 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
43 | 0000 0512 | 1190 | SUB | A + COM(РД) + 1 = A - РД ==> БР |
44 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
45 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
46 | 828F 0001 | 808F | BCS | IF BIT(0,PC) = 0 THEN ПРЕ(8D) |
47 | 0000 0002 | 0100 | BR | РД ==> БР |
48 | 0020 0000 | 4004 | БР ==> СК | |
49 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
4A | 838F 0004 | C28F | BPL | IF BIT(2,PC) = 1 THEN ПРЕ(8F) |
4B | 8247 0008 | 8347 | GOTO BR(47) | |
4C | 828F 0004 | 828F | BMI | IF BIT(2,PC) = 0 THEN ПРЕ(8F) |
4D | 8247 0008 | 8347 | GOTO BR(47) | |
4E | 828F 0002 | 818F | BEQ | IF BIT(1,PC) = 0 THEN ПРЕ(8F) |
4F | 8247 0008 | 8347 | GOTO BR(47) | |
50 | 0000 0402 | 0110 | ISZ | РД + 1 ==> БР |
51 | 0008 0000 | 4002 | БР ==> РД | |
52 | 0100 0000 | 0002 | РД ==> ОП(РА) | |
53 | 858А 8000 | DF8F | IF BIT(15,РД) = 1 THEN ПРЕ(8F) | |
54 | 0000 0408 | 0310 | СК + 1 ==> БР | |
55 | 0020 0000 | 4004 | БР ==> СК | |
56 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
57 | 0000 0402 | 0110 | JSR | РД + 1 ==> БР |
58 | 0010 0000 | 4003 | БР ==> РК | |
59 | 0000 0008 | 0300 | СК ==> БР | |
5A | 0008 0000 | 4002 | БР ==> РД | |
5B | 0100 0004 | 0202 | РД ==> ОП(РА), РК ==> БР | |
5C | 0020 0000 | 4004 | БР ==> СК | |
5B | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
Продолжение цикла выборки команды, декодирование и исполнение безадресных команд | ||||
5E | 8861 0800 | AB61 | БАД | IF BIT(11,PK) = 0 THEN Б0(61) |
5F | 886C 0400 | AA6C | IF BIT(10,PK) = 0 THEN Б1(6C) | |
60 | 82E0 0008 | 83E0 | GOTO Р - Б(E0) | |
61 | 8867 0400 | AA67 | Б0 | IF BIT(10,PK) = 0 THEN Б2(67) |
62 | 8865 0200 | A965 | IF BIT(9,PK) = 0 THEN Б3(65) | |
63 | 8882 0100 | A882 | IF BIT(8,PK) = 0 THEN ROL(82) | |
64 | 8285 0008 | 8385 | GOTO ROR(85) | |
65 | 887B 0100 | A87B | Б3 | IF BIT(8,PK) = 0 THEN CMA(7B) |
66 | 827E 0008 | 837E | GOTO CMC(7E) | |
67 | 886A 0200 | A96A | Б2 | IF BIT(9,PK) = 0 THEN Б4(6A) |
68 | 8876 0100 | A876 | IF BIT(8,PK) = 0 THEN CLA(76) | |
69 | 8279 0008 | 8379 | GOTO CLC(79) | |
6A | A888 | Б4 | IF BIT(8,PK) = 0 THEN HLT(88) | |
6B | 8287 0008 | 8387 | GOTO NOP(87) | |
6C | 886F 0200 | A96F | Б1 | IF BIT(9,PK) = 0 THEN Б5(6F) |
6D | 888A 0100 | A88A | IF BIT(8,PK) = 0 THEN EI(8A) | |
6E | 828C 0008 | 838C | GOTO DI(8C) | |
6F | 8873 0100 | A873 | Б5 | IF BIT(8,PK) = 0 THEN INC(73) |
70 | 0000 0110 | 1080 | DEC | A + COM(0) = A - 1 ==> БР |
71 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
72 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
73 | 0000 0410 | 1010 | INC | A + 1 ==> БР |
74 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
75 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
76 | 0000 0200 | 0020 | CLA | 0 ==> БР |
77 | 0040 C000 | 4035 | БР ==> A, N, Z | |
78 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
79 | 0001 0000 | 4080 | CLC | 0 ==> C |
7A | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
7B | 0000 0090 | 1040 | CMA | COM(A) ==> БР, инверсия A |
7C | 0040 C000 | 4035 | БР ==> A, N, Z | |
7D | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
7E | 8280 0001 | 8080 | CMC | IF BIT(0,PC) = 0 THEN Б6(80) |
7F | 8279 0008 | 8379 | GOTO CLC(79) | |
80 | 0002 0000 | 40C0 | Б6 | 1 ==> C |
81 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
82 | 0000 1000 | 0008 | ROL | RAL(A) ==> БР, сдвиг влево |
83 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
84 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
85 | 0000 0800 | 0004 | ROR | RAR(A) ==> БР, сдвиг вправо |
86 | 0040 E000 | 4075 | БР ==> A, C, N, Z | |
87 | 828F 0008 | 838F | NOP | GOTO ПРЕ(8F) |
88 | 0000 0001 | 4008 | HLT | Останов машины |
89 | 8201 0008 | 8301 | GOTO НАЧ(01) | |
8A | 1000 0000 | 4800 | EI | Разрешение прерывания |
8B | 8201 0008 | 8301 | GOTO НАЧ(01) | |
8C | 0800 0000 | 4400 | DI | Запрещение прерывания |
8D | 8201 0008 | 8301 | GOTO НАЧ(01) | |
Продолжение цикла выборки команды, декодирование и исполнение команд ввода-вывода | ||||
8E | 0200 0000 | 4100 | B/B | Организация связей с ВУ |
Цикл прерывания | ||||
8F | 8288 0080 | 8788 | ПРЕ | IF BIT(7,PC) = 0 THEN HTL(88) |
90 | 8201 0020 | 8501 | IF BIT(5,PC) = 0 THEN НАЧ(01) | |
91 | 0000 0200 | 0020 | 0 ==> БР | |
92 | 0004 0000 | 4001 | БР ==> РА | |
93 | 0000 0008 | 0300 | СК ==> БР | |
94 | 0008 0000 | 4002 | БР ==> РД | |
95 | 0100 0400 | 0012 | РД ==> ОП(РА), 1 ==> БР | |
96 | 0020 0000 | 4004 | БР ==> СК | |
97 | 0800 0000 | 4400 | Запрещение прерывания | |
98 | 8201 0008 | 8301 | GOTO НАЧ(01) | |
Пультовые операции | ||||
Ввод адреса | ||||
99 | 0000 0040 | 3000 | В/А | КР ==> БР |
9A | 0020 0000 | 4004 | БР ==> СК | |
9B | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
Чтение | ||||
9C | 0000 0008 | 0300 | ЧТ | СК ==> БР |
9D | 0004 0000 | 4001 | БР ==> РА | |
9E | 0080 0408 | 0311 | ОП(РА) ==> РД, СК + 1 ==> БР | |
9F | 0020 0000 | 4004 | БР ==> СК | |
A0 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
Запись | ||||
A1 | 0000 0008 | 0300 | ЗАП | СК ==> БР |
A2 | 0004 0000 | 4001 | БР ==> РА | |
A3 | 0000 0040 | 3000 | КР ==> БР | |
A4 | 0008 0000 | 4002 | БР ==> РД | |
A5 | 0100 0408 | 0312 | РД ==> ОП(РА), СК + 1 ==> БР | |
A6 | 0020 0000 | 4004 | БР ==> СК | |
A7 | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
Пуск | ||||
A8 | 0000 0200 | 0020 | ПУС | 0 ==> БР |
A9 | 005C E000 | 4077 | БР ==> A, C, N, Z, РА, РД, РК | |
AA | 0400 0000 | 4200 | Сброс флагов ВУ | |
AB | 0800 0000 | 4400 | Запрещение прерывания | |
AC | 828F 0008 | 838F | GOTO ПРЕ(8F) | |
... | ||||
B0 | Р - А | Арифметическая команда 7### | ||
... | ||||
D0 | Р - П | Команда перехода D### | ||
... | ||||
E0 | Р - Б | Безадресная команда FC## | ||
... | ||||
FF |
Далее содержимое БР, т.е. адрес следующей команды, пересылается в СК, а команда пересылается из РД в РК, после чего начинается ее дешифрация.
Так как адресные команды (команды с кодами операции от 0 до D) обязательно содержат ноль в 15, 14 или 13 бите, то проверкой этих битов РК можно выделить адресную команду и перейти к проверке ее 2-го бита (бита вида адресации). Для разделения команд ввода-вывода (код операции Е) и безадресных команд (код операции F) достаточно проанализировать 12-ый бит РК: если этот бит равен 1, то надо переходить к микрокомандам продолжения дешифрации безадресных команд, расположенных, начиная с адреса 5E (метка БАД). В комментариях микрокоманда анализа 12-го бита РК записана в виде: IF BIT(12,РК)=1 THEN БАД(5E).
В памяти микрокоманд нет полных микропрограмм для адресных команд с кодами операций 7 и D, а также для безадресных команд FC00, FD00, FE00 и FF00. Когда при декодировании команды выясняется, что выбрана команда 7xxx, управление передается ячейке с адресом В0. Начиная с этой ячейки, могут располагаться микрокоманды какой-либо новой арифметической команды (например, умножения). Для микропрограмм реализации команды перехода и безадресных команд выделены участки памяти микрокоманд с начальными адресами D0 и E0.
В базовой ЭВМ реализован и другой вариант интерпретатора, использующий более короткие - вертикальные микрокоманды (столбец “ВЕРТ.” табл. 3.2). Эти микрокоманды состоят из полей, в которых закодированы требуемые наборы управляющих сигналов (рис. 3.2). Для декодирования используются дополнительные устройства - дешифраторы.