Сегмент кода (содержит команды программы).

ПОЛЬЗОВАТЕЛЬСКИЕ РЕГИСТРЫ

Пользовательскими регистры называются потому, что программист может их использовать при разработке программ.

К пользовательским регистрам относятся:

1) восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов (регистры общего назначения)

eax/ax/ah/al

ebx/bx/bh/bl

edx/dx/dh/dl

ecx/cx/ch/cl

esi/si

edi/di

ebp/bp

esp/sp

2) шесть регистров сегментов: cs, ds, ss, es, fs, gs

3) регистр состояния (регистр флагов) eflags/flags;

4) регистр управления (регистр указателя команды) eip/ip.

Обратим внимание, наклонной разделительной чертой обозначены части одного большого 32-разрядного регистра. Они могут использоваться в программе как отдельные объекты.

Благодаря этому поддерживается работоспособность программ, написанных для младших 16-разрядных моделей микропроцессоров фирмы Intel, начиная с i8086. Регистры микропроцессоров i486 и Pentium в основном 32-разрядные. Размерность у них больше, что и отражено в их обозначениях — они имеют приставку e (Extended).

Регистры общего назначения

Регистры общего назначения физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), поэтому их еще называют регистрами АЛУ.

eax/ax/ah/al (Accumulator register) — регистр-аккумулятор.

Применяется для хранения промежуточных данных.

ebx/bx/bh/bl (Base register) — базовый регистр.

Применяется для хранения базового адреса некоторого объекта в памяти.

ecx/cx/ch/cl (Count register) — регистр-счетчик.

Применяется в командах, производящих некоторые повторяющиеся действия.

Его использование часто неявно и скрыто в алгоритме работы соответствующей команды. Например, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра ecx/cx.

edx/dx/dh/dl (Data register) — регистр данных.

Применяется для хранения промежуточных данных.

Обратим внимание, можно использовать только весь регистр целиком (например, eax), младшую 16-битную часть (например, ax) и 8-битные части этих регистров (например, ah,al).

!!! Старшие 16 бит этих регистров как самостоятельные объекты недоступны.

Регистры esi/si и edi/di используются для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов (можно сравнить со строками в языке Pascal).

esi/si (Source Index register) — индекс источника.

Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике (первоначальная строка).

edi/di(Destination Index register) — индекс приемника (получателя).

Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике (результирующая строка).

Регистры ebp/bp и esp/sp предназначены для работы со стеком.

esp/sp (Stack Pointer register) — регистр указателя стека.

Содержит указатель вершины стека в текущем сегменте стека.

ebp/bp (Base Pointer register) — регистр указателя базы кадра стека.

Регистр предназначен для организации произвольного доступа к данным внутри стека.

Сегментные регистры

В программной модели микропроцессора имеется шесть сегментных регистров:

Cs, ss, ds, es, gs, fs.

Все сегментные регистры - 16-разрядные.

Их существование обусловлено спецификой организации и использования оперативной памяти: микропроцессоры Intel в любом режиме работы (реальный режим, защищенный режим) поддерживают сегментную модель организации оперативной памяти.

Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в виде частей (фрагментов), которые называются сегментами. Соответственно, такая организация памяти называется сегментной.

Сегментные регистры предназначены для того, чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени.

Фактически в этих регистрах содержатся адреса ячеек памяти, с которых начинаются соответствующие сегменты.

Микропроцессор поддерживает следующие типы сегментов.

Сегмент кода (содержит команды программы).

Для доступа к этому сегменту служит регистр

cs (code segment register) — сегментный регистр кода.

Он содержит адрес сегмента кода, к которому в данный момент имеет доступ микропроцессор.

Наши рекомендации