<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 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.