Процессоры. Система команд ЭВМ. Устройства управления. Организация внутрипроцессорных систем ввода-вывода информации, страница 4

<116>

            Исходная система команд Intel по утверждению разработчиков использовала всего три формата команд:

            Рис. 3.1.1.1.09.

Но это лишь лукавый поверхностный взгляд. В поле КОП «спрятались» адреса регистров  СОЗУ и быстро выяснялось, что существовало семь «процессорных» форматов поля КОП:

            Рис. 3.1.1.10.

В заштрихованных полях содержатся собственно коды операций АЛУ. Другие обозначения:

DDD – поле приемника результата;

SSS – поле источника операнда;

RP – код регистровой пары;

CCC – указатель условия перехода;

NNN – адрес вектора прерывания.

Далее системы команд Intel развивались очень уродливо: в дело вмешались деньги. Весьма большие: стоимость используемого ПО Intel 8080 уже исчислялась миллиардами долларов.

Форматы команд процессоров  для PC XT/AT достаточно разнообразны и многочисленны. Главные причины этого заключены в  системе сегментации памяти, в разнообразии способов адресации, в возможности обрабатывать 8- и 16-разрядные данные, а также связаны с обширным списком операций, включая операции обработки строк данных. Длина команды может составлять от 1 до 6 байт, не считая возможного предшествующего команде байта префикса.

Большая часть форматов команд процессора приведена на рисунке:

Рис. 3.1.1.11.

<117>

Остановимся на описании полей в форматах команд, содержащих указатели длины операндов, указатели модификации, коды адресных регистров и т.п.

В первом байте команды всегда содержится код операции процессора (КОП), занимающий большее количество разрядов и указатели длины форматов. В отдельных случаях КОП может размещаться в постбайте в поле reg (характерно только для команд с одним операндом).

Функциональное назначение отдельных битов-указателей и битов-признаков таково:

w – признак длины формата данных; при w=0 длина операнда один байт, а при w=1 – машинное слово (два байта);

d - указатель одного из возможных мест запоминания результата операции (характерно только для команд с двумя адресами операндов);

s – признак длины непосредственного операнда в выполняемой команде; s=0 – «длинный» операнд, s=1 – «короткий».

v – указатель количества разрядов, на которое производится сдвиг в соответствующих командах; при v=0 сдвиг производится только на один разряд, а при v=1 – на количество разрядов, указанное в регистре CL (см. рис. 3.1.1.11).

Среди изображенных на рисунке форматов специально обращаем внимание на «длинный» шестибайтовый формат (рис. с литерой  (в)), на формат, содержащий шестнадцатиразрядный адрес для команд с прямой адресацией (рис. с литерой  (г)), и на формат, используемый в командах условных переходов (рис. с литерой (е)). На том же рисунке показан также формат постбайта, используемого главным образом для задания способа адресации одного или двух операндов. Постбайт содержит поле режима адресации – mod, поле кода регистров – reg и поле регистр/память – r/m, указывающее место размещения второго операнда.

 Правило формирования исполнительного адреса по коду в поле r/m показано в таблице 1, причем при (mod)=00 смещение принимается равным нулю (внимание! Имеется одно исключение: при (r/m)=110 исполнительный адрес равен шестнадцатиразрядному смещению, указанному в команде); при (mod)=01 восьмиразрядное смещение, указанное в команде путем расширения знака превращается в шестнадцатиразрядное; при (mod)=10 в команде указывается шестнадцатиразрядное смещение; наконец, при (mod)=11 вторым исполнительным адресом является адрес регистра, кодируемый также, как и первый исполнительный адрес регистра (поле reg), но в поле r/m . Коды регистров в постбайте, а также в поле reg в формате на рис. а, приведены в таблице:

Таблица 1.

Коды полей reg и r/m при (mod)=11

Регистр

При w=0

При w=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