Сегмент данных (содержит обрабатываемые программой данные).

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

ds (data segment register) — сегментный регистр данных.

Он содержитадрес сегмента данных текущей программы.

Сегмент стека (область памяти, называемая стеком).

Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым (LIFO).

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

ss(stack segment register) — сегментный регистр стека.

Он содержит адрес сегмента стека.

Дополнительные сегменты данных.

Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных.

Адреса дополнительных сегментов данных должны содержаться в регистрах

es, gs, fs (extension data segment registers).

es - дополнительный сегментный регистр данных или экстракодов (Extra Segment).

Начиная с микропроцессора 80386, появились два дополнительных регистра fs,gs (следующие буквы в латинском алфавите после e).

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

Регистр состояния

Регистр состояния eflags/flags содержит информацию о состоянии микропроцессора.

eflags/flags (flag register) — регистр флагов.

Разрядность eflags/flags — 32/16 бит.

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

Младшая часть этого регистра полностью аналогична регистру flags для i8086.

Флаги регистра eflags/flags подразделяются на три группы.

1) Флаги состояния

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

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

cf - флаг переноса (Carry Flag)

pf - флаг паритета (Parity Flag)

af - вспомогательный флаг переноса (Auxiliary carry Flag)

zf - флаг нуля (Zero Flag) (1 — результат нулевой; 0 — результат ненулевой)

sf - флаг знака (Sign Flag)

(1 - старший бит результата = 1; 0 - старший бит результата = 0)

of - Флаг переполнения (Overflow Flag)

Используется для фиксирования факта потери значащего бита при арифметических операциях.

iopl- уровень привилегий ввода-вывода (Input/Output Privilege Level)

Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.

nt - флажок вложенности задачи (Nested Task)

Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую

2) Флаг направления df (Directory Flag).

Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление обработки в цепочечных операциях: от начала строки к концу (df = 0) или от конца строки к ее началу (df = 1).

3) Системные флаги

Управляют вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.

tf - флаг трассировки (Trace Flag)

Предназначен для организации пошаговой работы микропроцессора.

if - Флаг прерывания (Interrupt enable Flag)

Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний.

(1 — аппаратные прерывания разрешены; 0 — аппаратные прерывания запрещены)

rf- флаг возобновления (Resume Flag)

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

Vm - флаг виртуального 8086 (Virtual 8086 Mode)

Признак работы микропроцессора в режиме виртуального 8086.

(1 - процессор работает в режиме виртуального 8086; 0 - процессор работает в реальном или защищенном режиме)

ac - флаг контроля выравнивания (Alignment Check)

Предназначен для разрешения контроля выравнивания при обращениях к памяти.

Регистр управления

Регистр управления eip/ipсодержит информацию о состоянии программы, команды которой в данный момент загружены на конвейер.

eip/ip (Instraction Pointer register) — регистр-указатель команд.

Содержит смещение следующей подлежащей выполнению команды (относительно текущего сегмента кода).

Регистр eip/ip имеет разрядность 32/16 бит.

!!! Этот регистр непосредственно недоступен программисту.

Загрузка и изменение его значения производятся различными командами условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.

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