Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 12

Регистры ESI и EDI называются расширенным индексом источника данных (extended source index) и расширенным индексом получателя данных (extended destination index) соответственно. Обычно они используются в командах высокоскоростной пересылки данных из одного участка памяти в другой.

Регистр EBP используется трансляторами языков программирования высокого уровня для обращения к параметрам функций и для ссылок на локальные переменные, размещённые в стеке.

Сегментные регистры: CS, DS, ES, FS, GS и SS — являются 16-разрядными и используются в качестве базовых при обращении к заранее распределённым областям оперативной памяти — сегментам.

Существует три типа сегментов и, соответственно, сегментных регистров:

кода (code segment, регистр CS), в них хранятся команды процессора, то есть машинный код программы;

данных (data segment, регистры DS, ES, FS и GS), в них, как видно из названия, хранятся данные;

стека (stack segment, регистр SS), в них хранится стек, назначение которого будет указано позже.

Регистр указателя команд EIP, называемый также счётчиком команд, является 32-разрядным и всегда содержит адрес следующей выполняемой команды. Изменение значения данного регистра вызывает передачу управления на новый участок программы.

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

Для примера рассмотрим флаги состояния.

Флаг служебного переноса (Auxiliary Carry flag, AF) устанавливается, если при выполнении арифметической операции с 8-разрядным операндом происходит перенос из третьего бита в четвёртый.

Флаг переноса (Carry flag, CF) устанавливается, если результат выполнения беззнаковой арифметической операции не помещается в разрядной сетке выделенного для него поля.

Флаг переполнения (Overflow flag, OF) устанавливается, если результат выполнения знаковой арифметической операции не помещается в разрядной сетке выделенного для него поля.

Флаг чётности (Parity flag, PF) устанавливается в случае, если в результате выполнения арифметической или логической операции получается результат, содержащий чётное количество единичных битов.

Флаг знака (Sign flag, SF) устанавливается, если при выполнении арифметической или логической операции получается отрицательное число (то есть старший бит результата равен 1).

Флаг нуля (Zero flag, ZF) устанавливается, если при выполнении арифметической или логической операции получается результат, равный нулю (то есть все биты результата равны 0).

4.2.2. Регистры модуля операций с плавающей запятой

Семейство процессоров IA-32 содержит так называемый модуль операций с плавающей запятой (Floating-Point Unit, FPU), который используется исключительно для быстрого выполнения операций этого типа. Модуль имеет следующие регистры:

для хранения чисел с плавающей запятой: ST(0), ST(1), …, ST(7);

кода операции;

управляющие: регистр тэгов, регистр управления, регистр состояния;

указателя: указатель команд, указатель данных.

4.2.3. Другие регистры

Кроме перечисленных в современных процессорах семейства IA-32 имеются следующие регистры:

восемь 64-разрядных регистров, использующихся в MMX-командах;

восемь 128-разрядных XMM-регистров, использующихся при выполнении многопотоковой обработки данных.

5. Основные элементы языка ассемблера

[3]

Программа на языке ассемблера представляет собою последовательность операторов. Операторы делятся на команды и директивы. Составными элементами операторов служат константы, выражения и идентификаторы.

5.1.  Константы

Константы языка ассемблера могут быть целочисленными, вещественными, символьными и строковыми.

5.1.1. Целочисленные константы

Синтаксис целочисленной константы:

[знак]цифры[суффикс], где знак есть