Сегмент кода (содержит команды программы).
ПОЛЬЗОВАТЕЛЬСКИЕ РЕГИСТРЫ
Пользовательскими регистры называются потому, что программист может их использовать при разработке программ.
К пользовательским регистрам относятся:
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) — сегментный регистр кода.
Он содержит адрес сегмента кода, к которому в данный момент имеет доступ микропроцессор.