October 16 2017 23:06:48
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
Индексная адресация
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ

Базовая адресация. Относительный адрес ЕА формируется путем сложения содержимого базового регистра (ВХ, ВР) и смещения d8 или d16. Базовая адресация реализуется при MOD = 01 или 10 и значениях R/M = 110 или 111 (см. табл. 2.9).

Индексная адресация. Относительный адрес ЕА формируется путем сложения содержимого индексного регистра (SI, DI) и смещения d8 или d16. Для реализации этого способа задаются значения MOD = 01 или 10 и R/M = 100 или 101 (см. табл. 2.8). При формировании 32-разрядных адресов в качестве базового или индексного может использоваться любой из регистров: ЕАХ, ЕСХ, EDX, ЕВХ, EBP, ESI, EDI (см. табл. 2.9).

Базово-индексная адресация. Относительный адрес ЕА образуется путем сложения содержимого базового (ВХ, ВР) и сегментного регистров (SI, DI). Такой способ адресации операнда реализуется при значениях поля R/M = 000,001,010,011, если задано MOD = 00 (см. табл. 2.10).

Базово-индексная адресация со смещением. Это вариант базово-индексной адресации, при котором к относительному адресу ЕА дополнительно прибавляется смещение d8 или d16. Данный способ адресации осуществляется при значениях поля MOD = 01 или 10 (см. табл. 2.8).

Дополнительные способы адресации реализуются при использовании 32-разрядных адресов, если задано значение R/M = 100 и команда содержит байт SIB. При этом поля INDEX и BASE определяют коды регистров, содержимое которых определяет индекс и базу для формирования адреса операнда (см. табл. 2.13).

При коде INDEX = 100 значение индекса принимается равным 0. В этом случае при MOD = 00 реализуется косвенно-регистровая или прямая (при BASE = 101) адресация, а при MOD = 01 или 10 -базовая адресация. Регистр ЕВР выбирается в качестве базового при значениях MOD = 01 или 10; при MOD = 00 в качестве базы используется 32-разрядное смещение (d32), задаваемое в четырех следующих байтах команды. В качестве индексного может использоваться любой из 32-разрядных регистров общего назначения, кроме ESP (см. табл. 2.6). Содержимое этого регистра умножается на масштабный коэффициент F (см. табл. 2.12), т. е. сдвигается влево на число разрядов (0, 1, 3 или 4), задаваемое содержимым поля SS в байте SIB.

Таблица 2.13 Кодировка индексных и базовых регистров в байте SIB

Поле INDEX Индексный регистр Поле BASE Базовый регистр
000 ЕАХ 000 ЕАХ
001 ЕСХ 001 ЕСХ
010 EDX 010 EDX
011 ЕВХ 011 ЕВХ
100 - 100 ESP
101 ЕВР 101 EBP(d32)
110 ESI 110 ESI
111 EDI 111 EDI

Таблица 2.14 Разрядность операндов и относительных адресов в защищенном режиме (+ наличие префикса, - отсутствие префикса)

Значение бита D 0 0 0 0 1 1 1 1
Префикс OS (66H) - - + + - - + +
Префикс AS (67H) - + - + - + - +
Разрядность операнда 16 16 32 32 32 32 16 16
Разрядность относительного адреса 16 32 16 32 32 16 32 16

Таким образом, при введении байта SIB реализуются три дополнительных варианта индексной и базово-индексной адресации (см. табл. 2.11).

Индексная адресация с масштабированием. Относительный адрес образуется сложением масштабированного индекса (содержимого индексного регистра, умноженного на коэффициент F) и смещения d32. Этот способ осуществляется при MOD = 00 и значении поля BASE = 101.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.04 секунд 2,254,137 уникальных посетителей