Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A_K_2-1.doc
Скачиваний:
7
Добавлен:
18.11.2019
Размер:
500.22 Кб
Скачать

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-х битовыми операндами и новыми режимами адресации.

  • Добавлены новые команды операций над двоичными цепочками и битами, а также команды двойного сдвига;

  • Для режима РВА введены команды поддержки управления памятью, защиты, организации виртуальной памяти и отладки.

  • Улучшены алгоритмы выполнения некоторых команд, что значительно сократило время их выполнения (например, команды умножения).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]