
- •2 Микропроцессор i80386
- •2.1.1 Программная модель 32-х разрядных
- •Отметим, что команды умножения знаковых и беззнаковых 32-х битовых целых чисел образуют 64-х битовое произведение, а команды деления рассчитаны на 64-х битовое делимое.
- •2.3.1 Режимы (методы) адресации
- •Базово-индексная адресация с отклонением. –
- •2.3.2 Использование сегментных регистров
- •2.3.3 Форматы команд
- •2.3.4 Кодирование режимов адресации
- •Команды передачи данных
- •Команды обработки цепочек
- •Команды работы с флагами (флажковые команды)
- •Команды передачи управления
- •Команды прерывания
2.3.4 Кодирование режимов адресации
За исключением команд с неявной адресацией, в которых операнд идентифицируется кодом операции, РЕЖИМ АДРЕСАЦИИ определяют один или два байта адресации, которые находятся после байта (или двух байтов) кода операции (см. рис. 2.5). Первым из них является байт «mod, r/m», а вторым – байт «sib» (масштаб, индекс, база). Байт «sib» может присутствовать только в командах с 32-х битовой адресацией, когда байт «mod, r/m» содержит r/m = 100B и значение в поле «mod» не равно 11В.
16-ТИ БИТОВАЯ АДРЕСАЦИЯ применяется в режимах РРА и V86 и различие между ними заключается в том, что в режиме V86 допускается страничное преобразование адреса. При 16-ти битовой адресации памяти на первом этапе эффективный адрес (ЕА) вычисляется как сумма до трех 16-ти битовых компонент : БАЗЫ, ИНДЕКСА И СМЕЩЕНИЯ В КОМАНДЕ (отклонения).
Во многих командах местонахождения операндов определяет байт «mod, r/m». Одним из операндов (источником или получателем) является содержимое регистра общего назначения (РОНа), выбираемого трехбитовым полем «reg» в соотвествии с таблицей 2.4. Второй операнд может находится в регистре общего назначения (двухбитовое поле mod = 11B) или ячейке памяти. Если второй операнд находится в РОНе, то трехбитовое поле «r/m» определяет регистр в соответствии с табл. 2.4.
Если поле «mod» показывает местонахождение второго операнда в памяти (поле «mod» не равно 11В), то оба поля «mod» и «r/m» совместно задают режим адресации (см. табл. 2.5). В этой таблице d8 и d16 обозначают 8-ми или 16-ти битовое смещение в команде (отклонение), задаваемое в следующих байтах команды. Предполагается, что сегментным регистром по умолчанию является регистр DS.
Отметим, что при 16-ти битовой адресации применяются только регистры BX, SI, DI и BP (в стековых операциях неявно привлекается регистр SP).
Таблица 2.5 – Формирование эффективного адреса (ЕА) памяти
при 16-ти битовой адресации
Поле «r/m» |
Адрес памяти второго операнда |
||
mod = 00 |
mod = 01 |
mod = 10 |
|
000 |
BX + SI |
BX + SI + d8 |
BX + SI + d16 |
001 |
BX + DI |
BX + DI + d8 |
BX + DI + d16 |
010 |
SS : [BP + SI] |
SS : [BP+SI + d8] |
SS : [BP+SI + d16] |
011 |
SS : [BP + DI] |
SS : [BP+DI + d8] |
SS : [BP+DI + d16] |
100 |
SI |
SI + d8 |
SI + d16 |
101 |
DI |
DI + d8 |
DI + d16 |
110 |
d16 |
SS : [BP + d8] |
SS : [BP + d16] |
111 |
BX |
BX + d8 |
BX + d16 |
32-ТИ БИТОВАЯ АДРЕСАЦИЯ применяется при выполнении 32-ти битового кода в режиме виртуальной адресации (РВА). Для адресации памяти можно использовать любой регистр общего назначения, а индекс разрешается масштабировать (умножать) на 1, 2, 4 или 8.
Отметим появление в адресных вычислениях блока контроля: процессор при каждом обращении к памяти проверяет, разрешает ли это обращение механизм защиты. Когда процессор обнаруживает несанкцио-нированное обращение, он генерирует особый случай защиты и отказывается от обращения к памяти.
32-х битовые режимы адресации кодируются с помощью двух байт «mod, reg» и «sib». Когда в команде фигурирует только смещение (отклонение) или база и смещение, достаточно одного байта «mod, reg». Когда же в команде определяются базовый и индексный регистры, приходится привлекать байт «sib».
Одним из операндов (источником или получателем) является содержимое регистра общего назначения, задаваемого полем «reg» в соответствии с табл. 2.4.
Второй операнд может находиться в РОНе (при этом поле mod = 11В), а сам регистр выбирается полем «r/m» в соответствии с табл. 2.4.
Когда поле «mod» определяет режимы адресации второго операнда в памяти (поле «mod» не равно 11В), выбор ячейки памяти осуществляется полями «mod» и «r/m» (см. табл. 2.6) или дополнительно еще и байтом «sib» (если в байте «mod, r/m» поле «r/m» = 100).
Таблица 2.6 – Формирование эффективного адреса памяти
при 32-х битовой адресации (r/m не равно 100В)
Поле «r/m» |
Адрес памяти второго операнда |
||
mod = 00 |
mod = 01 |
mod = 10 |
|
000 |
EAX |
EAX + d8 |
EAX + d32 |
001 |
ECX |
ECX + d8 |
ECX + d32 |
010 |
EDX |
EDX + d8 |
EDX + d32 |
011 |
EBX |
EBX + d8 |
EBX + d32 |
100 |
Имеется байт «sib» |
Имеется байт «sib» |
Имеется байт «sib» |
101 |
d32 |
SS : [EBP + d8] |
SS : [EBP + d32] |
110 |
ESI |
ESI + d8 |
ESI + d32 |
111 |
EDI |
EDI + d8 |
EDI + d32 |
Таблица 2.7 – Формирование эффективного адреса памяти
при 32-х битовой адресации (r/m = 100В)
Поле «base» |
Адрес памяти второго операнда |
||
mod = 00 |
mod = 01 |
mod = 10 |
|
000 |
EAX + ss * ind |
EAX + ss * ind + d8 |
EAX + ss * ind + d32 |
001 |
ECX + ss * ind |
ECX + ss * ind + d8 |
ECX + ss * ind + d32 |
010 |
EDX + ss * ind |
EDX + ss * ind + d8 |
EDX + ss * ind + d32 |
011 |
EBX + ss * ind |
EBX + ss * ind + d8 |
EBX + ss * ind + d32 |
100 |
SS : [ESP + ss * ind] |
SS:[ESP+ss * ind + d8] |
SS:[ESP+ss*ind+d32] |
101 |
d32 + ss * ind |
SS:[EBP+ss * ind + d8] |
SS:[EBP+ss*ind+d32] |
110 |
ESI + ss * ind |
ESI + ss * ind + d8 |
ESI + ss * ind + d32 |
111 |
EDI + ss * ind |
EDI + ss * ind + d8 |
EDI + ss * ind + d32 |
Таблица 2.8 – Кодирование полей «ss» и «index» в байте «sib»
Поле «ss» |
Множитель |
«index» |
Индексный регистр |
00 |
1 |
000 |
EAX |
01 |
2 |
001 |
ECX |
10 |
4 |
010 |
EDX |
11 |
8 |
011 |
EBX |
|
|
100 |
Отсутствует |
|
|
101 |
EBP |
|
|
110 |
ESI |
|
|
111 |
EDI |
В этом байте (см. рис. 2.5) поле «ss» указывает масштабный коэффициент индекса (см. табл. 2.8), поле «index» определяет регистр
общего назначения (кроме ESP), который служит индексом (см. табл. 2.8), а поле «base» идентифицирует любой РОН, участвующий в адресации как базовый регистр (см. табл. 2.7).
Когда поле «index» содержит 100В, показывая отсутствие индексного регистра, поле «ss» должно содержать 00; в противном случае эффективный адрес – не определен.
2.4 КОМАНДЫ ПРОЦЕССОРОВ 386+
Система команд 32-х разрядных процессоров 386+ включает все команды предыдущих поколений и усовершенствована по следующим направлениям:
Большинство команд базовой системы допускает операции с 32-х битовыми операндами и новыми режимами адресации.
Добавлены новые команды операций над двоичными цепочками и битами, а также команды двойного сдвига;
Для режима РВА введены команды поддержки управления памятью, защиты, организации виртуальной памяти и отладки.
Улучшены алгоритмы выполнения некоторых команд, что значительно сократило время их выполнения (например, команды умножения).