Учебная модель эвм: краткое описание
Модель можно рассматривать как некий собирательный образ простой ЭВМ (без конвейеров, многоядерности, суперскалярности, динамического параллелизма и других «наворотов» современных мощных процессоров). Однако, она адекватно иллюстрирует принципы организации командного цикла (в том числе на уровне микрокоманд), механизмы взаимодействия процессора и внешних устройств, работы с кэш-памятью. Программирование может осуществляться как в машинных кодах, так и на языке Ассемблер. При кодировании команд и данных использована десятичная система счисления.
Моделируемая ЭВМ включает процессор, оперативную (ОЗУ) и сверхоперативную (РОН + КЭШ) память, устройства вода/вывода.
В процессоре выделены относящиеся к арифметическому устройству (АУ) аккумулятор Acc и регистр данных DR и системные регистры: CR – регистр команд, PC - счётчик команд, SP - указатель стека, RB - регистр базы, RA - регистр адреса, регистр флагов IF, OV, S, Z.
К процессору постоянно подключена оперативная память объёмом 1000 ячеек, блок регистров общего назначения (РОН) – 10 регистров и по одному устройству ввода IR и вывода OR.
При желании можно подключить дополнительно модели кэш-памяти, контроллера клавиатуры, символьного дисплея, блока таймеров, тоногенератор, и контроллер семисегментной индикации.
Учебная модель ЭВМ: форматы данных и команд
Форматы данных
Ячейки ОЗУ и РОН содержат по шесть десятичных разрядов. Данные в модели представляются в формате целые десятичные числа, изменяющиеся в диапазоне минус 99 999…+99 999, содержащие знак и 5 десятичных цифр. Под знак отводится старшая десятичная цифра, причём «плюс» кодируется «0», а «минус» - любой другой цифрой (привычно – «1»).
Если результат арифметической операции выходит за пределы указанного диапазона, то формируется флаг переполнения OV=1. Результатом операции деления является целая часть частного. Деление на ноль вызывает переполнение.
Форматы команд
Система команд учебной ЭВМ содержит около 50 команд, большинство которых является безадресными или одноадресными. Только две команды являются двухадресными: MOV Ri, Rj - команда пересылки из регистра в регистр и JRN Zri, ADR -организация цикла. Все форматы команд приведены на рисунке
Два старших разряда (0 и 1) всех форматов отводится под код операции, разряд 2 определяет тип адресации, три младших разряда (3, 4 и 5) могут использоваться для задания адреса операнда в памяти, непосредственного операнда (в диапазоне 0..999), адреса передачи управления или двух адресов РОН. В случаях, когда требуется использовать непосредственный операнд в диапазоне минус 99999 .. +99999, используется формат 4, занимающий две ячейки памяти. Символ «Х» означает безразличное значение разряда в данном формате.
При описании форматов команд используются следующие сокращения: COP – код операции; TA – тип адресации; ADR – адрес операнда (прямой, косвенный или относительный – в зависимости от типа адресации) или трёхразрядный непосредственный операнд; R, R1, R2 – номер (адрес) регистра общего назначения (R0 – R9); ADC – адрес перехода в командах передачи управления; X – значение разряда безразлично.
Учебная модель ЭВМ: кодирование команд
Способы адресации
Код ТА |
Тип адресации |
Исполнительный адрес |
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 – пятиразрядный непосредственный операнд со знаком.