Условные обозначения
АЛУ Арифметико-логическое устройство
БР1 Буферный регистр 1
БР2 Буферный регистр 2
БУОП Блок управления опирацией
БФАОП Блок формирования адреса операнда
ДС Датчик сигналов
ДШ Дешифратор адреса
КОП Комутатор операции
ОЗУ Оперативное запоминающее устройство
ПР Признак результата
РА Регистр адреса
Рез Результат операции
РК Регистр команд
РП Регистровая память
ССКСиНО Схема считывания кодов смещений и непосредственных операндов
СФАД Сумматор физического адреса данных
СФАК Сумматор физического адреса команды
ТГ Тактовый генератор
FLAGS Регистр флагов
IP Регистр смещения команды (Index pointer)
Цвета, используемые при ответе и при просмотре результатов ответа:
Синий: отмеченные студентом взаимодействия (при даче ответа);
Салатовый: взаимодействия, отмеченные верно;
Зеленый: необходимые взаимодействия, которые не были отмечены;
Красный: лишние взаимодействия, которые были отмечены.
Регистры процессора
Регистры данных (регистры общего назначения):
AX (AX=AH*100h+AL);
BX (BX=BH*100h+BL);
CX (CX=CH*100h+CL);
DX (DX=DH*100h+DL);
Указатели и индексные регистры:
BP, SP, DI, SI;
Сегментные регистры:
CS Сегмент кода (Code segment)
DS Сегмент данных (Data segment)
ES Дополнительный сегмент данных (Extended segment)
SS Сегмент стека (Stack segment)
Поля команды
КОП Код операции
d Определяет источник и приемник
d=0, если источник в reg, а приемник в md, r/m;
d=1, если источник в md, r/m, а приемник в reg;
s Вместе с битом w определяют разрядность операнда и операции (табл. 1)
w Разрядность операнда
md, r/m Определяют первый операнд (табл. 2)
reg Вместе с w определяют регистр (табл. 3)
Disp Смещение адреса операнда
Im Непосредственный операнд
|
Таблица 1. Разрядность операции и операндов
|---|---|--------------------|
| | | разрядность |
| s | w |----------|---------|
| | | операция | операнд |
|---|---|----------|---------|
| 0 | 0 | 8 | 8 |
| 0 | 1 | 16 | 16 |
| 1 | 0 | ---- | ---- |
| 1 | 1 | 16 | 8 |
|---|---|----------|---------|
Таблица 2. Формирование 16-разрядного EA
|-----|-----------------------------------------------------|
| | md |
| r/m |-------------|------------------|--------------------|
| | 00 | 01 | 10 |
|-----|-------------|------------------|--------------------|
| 000 | ds:[bx+si] | ds:[bx+si+disp8] | ds:[bx+si+disp16] |
| 001 | ds:[bx+di] | ds:[bx+di+disp8] | ds:[bx+di+disp16] |
| 010 | ss:[bp+si] | ss:[bp+si+disp8] | ss:[bp+si+disp16] |
| 011 | ss:[bp+di] | ss:[bp+di+disp8] | ss:[bp+di+disp16] |
| 100 | ds:[si] | ds:[si+disp8] | ds:[si+disp16] |
| 101 | ds:[di] | ds:[di+disp8] | ds:[di+disp16] |
| 110 | ds:[disp16] | ss:[bp+disp8] | ss:[bp+disp16] |
| 111 | ds:[bx] | ds:[bx+disp8] | ds:[bx+disp16] |
|-----|-------------|------------------|--------------------|
Примечания:
1) Если md=11, то операндом является регистр, определяемый в соответствии с таблицей 3
2) В мнемоническом обозначении команд явное указание сегментных регистров не требуется. Если в задании смещения участвует регистр bp, то сегментным будет регистр ss. В остальных случаях - регистр ds.
Таблица 3. Кодировка регистров общего назначения
|-------|---------|
| reg, | w |
|r/m при|----|----|
| md=11 | 0 | 1 |
|-------|----|----|
| 000 | al | ax |
| 001 | cl | cx |
| 010 | dl | dx |
| 011 | bl | bx |
| 100 | ah | sp |
| 101 | ch | bp |
| 110 | dh | si |
| 111 | bh | di |
|-------|----|----|
Форматы команд сложения и вычитания
Обозначения:
R Регистр (register)
M Память (memory)
I Непосредственный операнд (immediate)
A Аккумулятор (accumulator - регистр AX)
|-----|---|---| |----|-----|-----|
R/M, R | КОП | d | w | | md | reg | r/m |
|-----|---|---| |----|-----|-----|
Используется при сложении/вычитании двух регистров либо регистра и памяти.
При md ¹ 11 операндами являются регистр и память.
|
При md=11 используются два регистра.
В этом случае возможно неоднозначное представление команд.
Пример:
ADD ax, bx
d=0: ax в md, r/m; bx в reg.
Код команды: 1-й байт 2-й байт
000000 0 1 11 011 000 = 01D8h
КОП d w md reg r/m
d=1: ax в reg; bx в md, r/m.
Код команды: 1-й байт 2-й байт
000000 1 1 11 000 011 = 03C3h
КОП d w md reg r/m
|-----|---|---| |----|-----|-----| |-------------|
R/M, I | КОП | s | w | | md | КОП | r/m | | Im8, 16 |
|-----|---|---| |----|-----|-----| |-------------|
Используется при сложени/вычитании регистра либо памяти с числом.
При md=11 первым операндом является регистр. Его разрядность определяется полем w. Разрядность непосредственного операнда определяется полями s, w (табл. 1).
При md ¹ 11 первым операндом является память. Разрядность обоих операндов определяется в этом случае битами s, w.
|-----|---| |-------------|
A, I | КОП | w | | Im8, 16 |
|-----|---| |-------------|
Используется при сложении/вычитании аккумулятора с числом. Разрядность числа определяется полем w.
Этапы выполнения команды
Предполагается, что выполняется команда сложения или вычитания.
Этап 1: Выборка команды из ОЗУ
Значения регистров CS и IP передаются на сумматор физического адреса команды (СФАК). На выходе СФАК формируется физический адрес команды (ФАК=CS*16+IP), который поступает на регистр адреса (РА) ОЗУ. Из РА сигнал подается на дешифратор адреса (ДШ), который, в свою очередь, коммутирует схемы ОЗУ таким образом, чтобы на выходе получить код команды. Его значение записывается в регистр команд (РК). В работе предполагается, что команда считывается за одно обращение к памяти. Поле кода операции (КОП) передается на коммутатор операции (тоже КОП - не путать с кодом операции!). При командах типа "R/M, I" на КОП передаются также и значения бит s и w. На этом же этапе счетчик команд увеличивается на длину считанной команды, формируя адрес следующей команды.
|
Этап 2: Считывание первого операнда из регистра команд
Будем всегда считать, что для команд типа "R/M, R" и "R/M, I" первый операнд определяется полями md, r/m; для команд типа "A, I" первым операндом является регистр AX. Для каждого типа команд действия будут различными. Рассмотрим возможные варианты:
1) Команды типа "R/M, R"
Из РК считываются на блок формирования адреса операнда (БФАОП) значения полей w, md и r/m.
Далее, синхронизируя сигналы с помощью тактового генератора (ТГ), БФАОП производит необходимую коммутацию оборудования.
При md=11 БФАОП коммутирует регистровую память (РП) так, чтобы на ее выходе сформировалось значение запрашиваемого в r/m регистра, которое передается на первый буферный регистр (БР1) АЛУ.
При md ¹ 1 имеем два случая:
а) При формировании адреса операнда поля Disp не используются.
БФАОП производит коммутацию РП, чтобы значения регистров, используемых при формировании адреса, поступили на сумматор физического адреса данных (СФАД).
б) При формировании адреса операнда используется поле Disp.
БФАОП производит коммутацию РП и схемы считывания кодов смещений и непосредственных операндов (ССКСиНО). Значения полей Disp считываются на ССКСиНО. На СФАД поступают значения из РП и ССКСиНО.
На выходе СФАД формируется физический адрес данных:
(ФАД = сегментный регистр*16 [+ регистры смещения] [+ Disp]).
ФАД передается на РА, потом на ДШ и, в соответствии с управляющим сигналом из БФАОП, происходит коммутация ОЗУ так, чтобы на выходе получить значение операнда, который передается на буферный регистр БР1 АЛУ.
2) Команды типа "R/M, I"
Если операндом является память (md ¹ 11), то на БФАОП из РК считывается значение бита s. Остальные действия в этом случае аналогичны первому.
3) Команды типа "A, I"
Cинхронизируя сигналы с помощью тактового генератора (ТГ), БФАОП производит коммутацию РП так, чтобы на ее выходе получить значение регистра AX, которое передается на буферный регистр БР1 АЛУ.
Этап 3: Считывание второго операнда из регистра команд
Рассмотрим каждый тип команды отдельно:
1) В командах типа "R/M, R" второй операнд определяется полями reg и w, значения которых считываются на БФАОП, который, в свою очередь, синхронизируясь тактовым генератором ТГ посылает сигналы на РП, откуда значение запрашиваемого регистра посылается на БР2.
2) В командах типа "R/M, I" второй операнд содержится в полях Im. Его разрядность определяется полями s и w. Их значения посылаются на БФАОП, который синхронизируясь ТГ, коммутирует ССКСиНО. Значения полей Im посылаются на ССКСиНО откуда записываются в буферный регистр БР2 АЛУ.
3) В командах типа "А, I" второй операнд содержится в полях Im. Его разрядность определяется полем w. Это значение посылается на БФАОП, который синхронизируясь тактовым генератором ТГ, коммутирует ССКСиНО. Значения полей Im посылаются на ССКСиНО, откуда записываются в буферный регистр БР2 АЛУ.
Этап 4: Выполнение арифметических операций в арифметико-логическом устройстве (АЛУ)
Коммутатор операции (КОП) коммутирует оборудование блока управления операциями (БУОП) таким образом, чтобы на его выходе были сигналы, необходимые АЛУ для выполнения операции. Подача сигналов на АЛУ регулируется датчиком сигналов (ДС).
Этап 5: Запись результата
1) В командах типа "R/M, R" приемник определяется полем d. Значение этого бита подается на БФАОП. Под управлением тактового генератора ТГ блок БФАОП производит дальнейшую коммутацию оборудования. Возможны два различных случая:
a) d=1: приемник определяется полем reg.
БФАОП коммутирует РП, подготавливая нужный регистр для приема значения, которое посылается туда из АЛУ.
б) d = 0: приемник определяется полями md, r/m.
Если md = 11 (приемник - регистр), то действия аналогичны пункту (а).
Если md ¹ 11 (приемник - память), то в РА уже хранится физический адрес ОЗУ, вычисленный при обращении к этой ячейке за операндом. Его значение передается на ДШ, ОЗУ, в результате чего ОЗУ готово принять значение, которое записывается туда из АЛУ под управлением сигнала из БФАОП.
2) Для командах типа "R/M, I" действия аналогичны пункту (1.б).
3) В командах типа "А, I" приемником является регистр AX. БФАОП коммутирует РП, подготавливая регистр AX для приема значения, которое посылается туда из АЛУ.
Значение признака результата (ПР) записывается в регистр флагов (FLAGS).