Автор работы: Пользователь скрыл имя, 23 Октября 2011 в 17:51, лекция
Высокопроизводительный 32-х разрядный микропроцессор 80i86 ориентирован на эффективное выполнение программ в среде многозадачных ОС (типа Windows). Микропроцессор имеет 32-разрядные регистры и 32-х разрядные раздельные шины адреса и данных.
Поле md (модальность) показывает, как интерпетируется поле r/m для нахождения первого операнда:
если md=11, то операнд находится в регистре, номер которого задан полем r/m, в остальных случаях операнд находится в памяти. Когда адресуется память, то поле md определяет вариант использования внутрикомандного смещения disp, находящегося в третьем и четвертом байтах команды:
00, то disp=0 и смещение отсутствует;
md= 01, disp=disp L – команда содержит 8-битовое смещение D8;
10, disp=disp H disp L – команда содержит 16-битовое смещение D16.
При md ≠ 11 реализуется косвенная адресация, и поле r/m определяет правила формирования эффективного адреса ЕА операнда в соответствии с таблицей:
Поле md | Регистровая адресация | ||||
r/m | md=0
disp=0 |
md=01
disp=disp L=D8 |
md=10
disp=dispH dispL=D16 |
md=11 | |
w=0 | w=1 | ||||
000 | Bx+SI
Базово- индексная адресация |
Bx+SI+D8
Базово – индексная |
Bx+SI+D16
Базово – индексная |
AL | Ax |
001 | Bx+DI
Базово – индексная |
Bx+DI+D8 | Bx+DI+D16 | CL | Cx |
010 | BP+SI
Базово – индексная |
BP+SI+D8 | BP+SI+D16 | DL | Dx |
011 | BP+DI | BP+DI+D8 | BP+DI+D16 | BL | Bx |
100 |
SI индекс-
ная |
SI+D8 индекс-
ная |
SI+D16 индекс-
ная |
AH | SP |
101 | DI адреса-
ция |
DI+D8 адреса-
ция |
DI+D16 адреса-
ция |
CH | BP |
110 | D16 Абсо-
лютная адре- сация |
BP+D8 Базо-
вая адреса- ция |
BP+D16
Базовая |
DH | SI |
111 | Bx Базовая
адресация |
Bx+D8 | Bx+D16 | BH | DI |
Приведенные в таблице правила имеют одно исключение, позволяющее реализовать прямую (абсолютную) адресацию: если md=00, a r/m=110, то EA=D16=disp H disp L.
Таким образом, имеется три варианта интерпретации поля md и восемь вариантов интерпретации поля r/m, что дает 24 варианта вычисления эффективного адреса ЕА.
Смещение disp, содержащее в команде, интерпретируется как целое число со знаком, которое участвует в вычислении эффективного адреса ЕА.
Имеется
специальный формат команды
Поскольку необходимость в адресации второго операнда отсутствует, то поле reg используется для расширения кода операции COP. Отсутствует также и бит направления d, т.к. результат операции можно поместить только на место первого операнда. Место этого бита занимает бит S, который является признаком использования одного или двух байт для задания непосредственного операнда. Поле S и W интерпретируются следующим образом:
х0, один байт данных data L;
SW= 01, два байта данных data H data L;
11, один байт данных, который автоматически расширяется со знаком
до 16 бит.
Способы адресации
Команды
микропроцессора реализуют
Регистровая адресация
Операнд
находится в одном из РОНов
или в одном из сегментных
регистров. Регистр может быть
определен в байте кода
Прямая адресация
В этом случае эффективным адресом ЕА является содержимое байтов смещения disp команды. Этот способ реализуется при использовании постбайта с полями md=00 и r/m=110. ЕА – смещение в сегменте. Это целое число без знака.
Косвенная регистровая адресация
Эффективный адрес ЕА равен содержимому одного из регистров SI, DI и Bx при md=00 и r/m=100, 101 и 111.
Данный способ адресации позволяет вычислять адреса во время выполнения программ. При изменении содержимого регистра (SI, DI и Bx) одна и та же команда оперирует различными ячейками памяти, что позволяет организовать вычислительные циклы. Изменение РОНов обычно осуществляется с помощью команд инкрементирования (увеличения) и декрементирования.
Базовая адресация
ЕА вычисляется
путем суммирования
При использовании Bx происходит обращение к операнду в текущем сегменте данных, а при BP – в текущем сегменте стека. Смещение disp может иметь длину 8 или 16 бит.
Индексная адресация
ЕА вычисляется
путем суммирования
Базовая индексная адресация
ЕА равен сумме содержимого базового регистра Bx или BP, индексного регистра SI или DI и смещения disp, находящегося в команде (в частном случае смещение disp может отсутствовать). Этот способ реализуется при md≠11 и r/m=000,001,010,011 и является наиболее гибким, т.к. две компоненты адреса (базу и индекс) можно изменять в процессе выполнения программ, что позволяет легко обращаться к элементам двумерных матриц.