ESI/SI – индекс источника (Source Index). При реализации цепочечных операций, этот регистр адресует в соответствующем сегменте текущий элемент цепочки – источника. При этом осуществляется автоматический инкремент/декремент содержимого данного регистра. Может также использоваться при формировании эффективных адресов.
EDI/DI – индекс получателя или приемника (Destination Index). При реализации цепочечных операций, адресует в сегменте ES текущий элемент цепочки – получателя. При этом также осуществляется автоматический инкремент/декремент содержимого данного регистра. Может использоваться при формировании эффективных адресов.
В заключение следует отметить, что при 32-разрядной адресации, в защищенном режиме работы процессора, при формировании эффективного адреса, в качестве базовых и индексных регистров могут быть использованы любые регистры общего назначения.
Сегментные регистры
Сегментные регистры предназначены для хранения информации о расположении соответствующих сегментов памяти в адресном пространстве.
CS – сегментный регистр кода (Code Segment Register). Содержит селектор текущего сегмента кода, т.е. сегмента, в котором размещаются исполняемые программы.
SS – сегментный регистр стека (Stack Segment Register). Содержит селектор текущего сегмента стековой памяти.
DS – сегментный регистр данных (Data Segment). Содержит селектор основного текущего сегмента используемых данных.
ES, FS, GS – дополнительные сегментные регистры данных (EF – Extra Segment, EF и GS – просто обозначения). Эти регистры содержат селекторы, определяющие расположение в адресном пространстве дополнительно еще трех сегментов данных, доступных текущей программе. Специфика сегмента ES заключается в том, что только в нем размещается строка назначения (приемника) или стробирования, при обработке цепочечных команд. Дополнительные сегменты данных FS и GS, впервые появившиеся в МП 80386, не несут каких либо специфических функций и применяются только для удобства размещения данных, и их использование определяется организацией структур данных (способах размещения данных в сегментах). Отметим также, что регистры FS и GS, ни в каких командах по умолчанию не определены.
Следует иметь в виду, что непосредственный операнд в сегментные регистры заслать нельзя (нет таких команд). Поэтому непосредственный операнд сначала засылается в один из регистров общего назначения, а потом уже из этого регистра передается в соответствующий сегментный регистр.
Кроме того, надо учитывать, что сегментный регистр кода CS является программно недоступным, и в него, отличие от всех других, вообще нельзя занести какую либо информацию без специального приема альтернативного переименования сегментов. Начальное содержание CS устанавливается при инициализации системы и затем изменяется программно при выполнении команд межсегментных (дальних - FAR) переходов и вызовов, таких как CALL, JUMP, а также при переключении задач.
В базовом микропроцессоре i8086, а также в последующих моделях процессорах семейства Х86 в реальном режиме работы, селектором являются старшие 16 разрядов полного 20-ти разрядного адреса младшего байта соответствующего сегмента (младшие 4 разряда принимаются равными нулям).
В защищенном режиме работы процессоров семейства Х86, полный 20-ти разрядный адрес начала любого сегмента (базовый адрес) содержится в так называемом дескрипторе, некоторой 8-ми байтовой структуре данных, которая определяется содержимым соответствующего сегментного регистра, т.е. селектором. Для указания адреса конкретного байта внутри сегмента к базовому адресу прибавляется смещение (offset), которое указывается непосредственно в команде. Если сегмент не указывается, то по умолчанию используется сегмент в соответствии с таблицей II.1.
Для каждого из сегментных регистров предусмотрен префикс замены сегмента. Однако этот префикс действует на выбор сегмента не во всех случаях.
- Для цепочек – получателей в цепочечных командах применяется всегда только сегмент ES.
- Получатель включения в стек или извлечения из стека находится всегда только в сегменте SS.
- Выборка команд производится всегда только из сегмента CS.
Таблица II.1.
Возможности переопределения сегментных регистров
Тип обращения к памяти |
Базовый адрес сегмента |
Сегментное смещение |
|
По умолчанию |
Возможность переопределения |
||
Выборка команды |
CS |
Нет |
IP(EIP) |
Обращение к стеку |
SS |
Нет |
SP(ESP) |
Адресация операнда |
DS |
CS, SS, ES, FS, GS |
EA |
Адресация операнда с использованием BP(EBP) или SP(ESP) как базового регистра |
SS |
CS, DS, ES, FS, GS |
EA |
Адресация элемента цепочки-источника |
DS |
CS, SS, ES, FS, GS |
SI(ESI) |
Адресация элемента цепочки-получателя (приемника) |
ES |
Нет |
DI(EDI) |
Регистр указателя инструкций.
Регистр указателя инструкций EIP/IP (Instruction Pointer) предназначен для адресации команд внутри текущего сегмента кода. То есть, в этом регистре содержится смещение в сегменте кода. Программист должен полагать, что к окончанию выборки из памяти текущей команды в регистре EIP/IP образуется адрес следующей по порядку команды. Однако надо иметь в виду, что с учетом внутренней конвейерной архитектуры современных процессоров, а также опережающей выборки команд из оперативной памяти, ситуация с адресацией команд обстоит несколько сложнее.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.