December 15 2017 04:18:32
Навигация
Авторизация
Логин

Пароль



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

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

Таблица 2.8 Выбор сегментных регистров и относительного адреса

Тип обращения к памяти Сегментный регистр Относительный адрес*
1. Выборка команды CS EIP(IP)
2. Обращение к стеку SS ESP (SP)
3. Адресация операнда DS (CS,SS,ES,FS,GS) EA
4. Адресация элемента строки-источника DS (CS,SS,ES,FS,GS) ESI (SI)
5. Адресация элемента строки-приемника ES EDI (DI)
6. Адресация операнда с использованием в качестве базового регистра EBP (BP) или ESP (SP) SS (CS,DS,ES,FS,GS) EA
* В скобках указаны регистры, содержащие относительный адрес при обработке 16-разрядных операндов

Если при формировании 32-разрядного адреса значение поля R/M = 100, то команда содержит дополнительный байт адресации SIB. В таком случае правила образования ЕА определяются табл. 2.11, где (IR*F) - масштабированный индекс; IR - содержимое индексного регистра, который задается кодом INDEX; F-масштабный коэффициент, значение которого определяется кодом SS (табл. 2.12). В качестве индексного может использоваться любой из регистров общего назначения, кроме указателя стека ESP(Ta6л. 2.13).

Разрядность обрабатываемых операндов и адресов определяется режимом работы процессора. Если программы выполняются в реальном режиме или режиме виртуального 8086, то по умолчанию используются 16-разрядные относительные адреса и операнды. При работе в защищенном режиме дескриптор сегмента исполняемой команды содержит бит D, который определяет принимаемую по умолчанию разрядность адресов и операндов: 16 при D = 0,32 при D = 1. Если команде предшествуют префиксы OS, AS, то при ее выполнении принятая по умолчанию разрядность операнда или адреса изменяется. В результате разрядность операндов и относительных адресов в защищенном режиме определяется в соответствии с табл. 2.14. Для реального режима и режима виртуального 8086 выбор разрядности определяется при значениях D = 0.

Процессор реализует ряд способов адресации операнда, набор которых обеспечивает эффективную работу с языками высокого уровня (Си, Фортран и др.).

Непосредственная адресация. В качестве операнда Imm используются один, два или четыре последних байта команды. Такой способ адресации реализуется при выполнении ряда команд пересылки (MOV, PUSH), арифметических операциях (ADD, ADC, SUB, SBB, CMP, IMUL) и логических операциях (AND, OR, XOR, TEST). Непосредственная адресация задается определенным значением кода ОРС, содержащегося в первом байте этих команд, или поля REG/OPC байта MODR/M. Разрядность используемых непосредственных данных (8,16 или 32 разряда) зависит от режима работы процессора и может изменяться соответствующим префиксом.

Таблица 2.9 Формирование 16-разрядного ЕА

Поле R/M Поле MOD

00 01 10
000 DS:[BX+SI] DS:[BX+SI+d8] DS:[BX+SI+d16]
001 DS:[BX+DI] DS:[BX+DI+d8] DS:[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 DS:[SI] DS:[SI+d8] DS:[SI+d16]
101 DS:[DI] DS:[DI+d8] DS:[DI+d16]
110 DS:[d16] SS:[BP+d8] SS:[BP+d16]
111 DS:[BX] DS:[BX+d8] DS:[BX+d16]

Таблица 2.10 Формирование 32- разрядного ЕА (байт SIB отсутствует)

Поле R/M Поле MOD

00 01 10
000 DS:[EAX] DS:[EAX+d8] DS:[EAX+d32]
001 DS:[ECX] DS:[ECX+d8] DS:[ECX+d32]
010 DS:[EDX] DS:[EDX+d8] DS:[EDX+d32]
011 DS:[EBX] DS:[EBX+d8] DS:[EBX+d32]
100 (см. табл. 1.10) (см. табл. 1.10) (см. табл. 1.10)
101 DS:[d32] SS:[EBP+d8] SS:[EBP+d32]
110 DS:[ESI] DS:[ESI+d8] DS:[ESI+d32]
111 DS:[EDI] DS:[EDI+d8] DS:[EDI+d32]


Таблица 2.11 Формирование 32- разрядного ЕА (байт SIB присутствует)

Поле Поле MOD
BASE 00 01 10
000 DS:[EAX+(IR*F)] DS:[EAX+(IR*F)+d8] DS:[EAX+(IR*F)+d32]
001 DS:[ECX+(IR*F)] DS:[ECX+(IRT)+d8] DS:[ECX+(IR*F)+d32]
010 DS:[EDX+(IR*F)] DS:[EDX+(IR*F)+d8] DS:[EDX+(IR*F)+d32]
011 DS:[EBX+(IR*F)] DS:[EBX+(IR*F)+d8] DS:[EBX+(IR*F)+d32]
100 SS:[ESP+(IR*F)] SS:[ESP+(IR*F)+d8] SS:[ESP+(IR*F)+d32]
101 DS:[d32+(IR*F)] SS:[EBP+(IR*F)+d8] SS:[EBP+(IR*F)+d32]
110 DS:[ESI+(IR*F)] DS:[ESI+(IR*F)+d8] DS:[ESI+(IR*F)+d32]
111 DS:[EDI+(IR*F)] DS:[EDI+(IR*F)+d8] DS:[EDI+(IR*F)+d32]

Таблица 2.12 Кодировка значений масштабного коэффициента F


Поле SS Масштабный множитель F
00
01
10
11
1
2
4
8

Регистровая адресация. Операнд выбирается из регистра, определяемого полем R/M в байте MODR/M. Код, содержащийся в этом поле, задает выбираемый регистр в соответствии с табл. 2.6. Данный способ реализуется при задании в байте MODR/M значения поля MOD = 11.

Косвенно-регистровая адресация. Относительный адрес ЕА содержится в индексном (SI, DI, ESI, EDI) или базовом (ВХ, ЕВХ) регистрах или регистрах общего назначения (ЕАХ, ЕСХ, EDX). Данный способ реализуется при значении поля MOD = 00 (см. табл. 2.9,2.10).

Прямая адресация. Относительный адрес операнда ЕА содержится в команде в виде смещения d16 или d32. Этот способ адресации реализуется при значениях полей R/M = 110 и MOD = 00, R/M = 110 (см. табл. 2.9) или R/M = 101 (см. табл. 2.10).

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

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

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

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