Регистр флагов делится на

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

¾ 6 флагов управления (управляют вводом/выводом, прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы.)

Флаги состояния:

CF - Флаг переноса (Carry Flag) устанавливается в

1 — арифметическая операция произвела перенос из старшего бита результата;

0 — переноса не было

PF - Флаг четности (Parity Flag) устанавливается в

1 — если 8 младших разрядов результата содержат четное число единичных бит;

0 — если 8 младших разрядов результата содержат нечетное число единиц

AF – флаг дополнительного переноса (Auxiliary carry Flag) Фиксирует факт заема из младшей тетрады результата:
1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;
0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было

ZF - Флаг нуля (Zero Flag) устанавливается в

1 — результат арифмет. операции = 0;
0 — результат ненулевой.

SF – знаковый флаг (Sign Flag) Отражает состояние старшего бита результата
1 — старший бит результата равен 1;
0 — старший бит результата равен 0

OF - Флаг переполнения (Overflow Flag) Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях:
1 — в результате операции происходит перенос (заем) старшего, знакового бита результата
0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата

IOPL - Уровень привилегий ввода-вывода (Input/Output Privilege Level) (двубитовое поле) Используется в защищенном режиме работы МП указывая на min уровень привилегии на кот. разрешаются операции ввода-вывода. 

NT - флаг вложенной задачи (Nested Task) Используется в защищенном режиме работы МП для фиксации того факта, что одна задача вложена в другую








Флаги управления

TF - Флаг трассировки (Trace Flag) Предназначен для организации пошаговой работы микропроцессора.
1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. Может использоваться при отладке программ, в частности отладчиками;
0 — обычная работа

IF - Флаг прерывания (Interrupt enable Flag) Предназначен для разрешения или запрещения аппаратных прерываний
1 — аппаратные прерывания разрешены;
0 — аппаратные прерывания запрещены

RF - Флаг возобновления (Resume Flag) Используется при обработке прерываний от регистров отладки.

VM - Флаг виртуального режима (Virtual 8086 Mode) Признак работы микропроцессора в режиме виртуального 8086.
1 — процессор работает в виртуальном режиме;
0 — процессор работает в реальном или защищенном режиме

AC - Флаг контроля выравнивания (Alignment Check) Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом am в системном регистре cr0.

1 – разрешает контроль вырывания

0 – в противном случае 

DF – флаг направления (Directory Flag) Задает направление обработки цепочек данных.

1 – от старшей части к младшей

0 – от младшей к старшей

cld снять флаг df

std установить флаг df







Флаговые операции:

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

Пример

Lahf; загружаем в ah содержимое флагового регистра

Stc; устанавливаем флаг c

Clc; сбрасываем флаг c

Cmc; инвертируем флаг c

Std; устанавливаем флаг d

Cld; сбрасываем флаг c

Cli; сбрасываем флаг i

Sti; устанавливаем флаг i

Sahf; восстанавливаем из ah флаговый регистр

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

В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs. Их существование обусловлено спецификой организации и использования оперативной памяти МП Intel. Она заключается в том, что МП аппаратно поддерживает структурную организацию программы в виде трех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной.

Каждый сегментный регистр имеет 16-ть разрядов и обеспечивает адресацию непрерывного участка памяти объемом 64 Кбайт.

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

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

CS – содержит базовый адрес текущего кодового сегмента

DS – сегмент данных по умолчанию

ES, FS, GS – дополнительные сегментные регистры, служат для адресации дополнительных сегментов данных.

eip / ip Указатель команд

Всегда содержит адрес смещения команды, которая будет выполнятся следом за текущей

5 Прерывание – приостановка выполнения активной, на данный момент, задачи по причине внутренней или внешней. (всего 3 причины, 2-е из которых внутренние и 1 внешняя)

Внутренняя причина: 1) обуславливается возникновением (искл) особого случая (т.е возникновение ошибки); 2) при не выполнении команды прерывания (int)

Внешняя причина: 3) получение сигнала от аппаратуры, получение сигнала на запрос об обработке аппаратуры (т.е аппаратное прерывание).

На уровне аппаратных средств различают внутренние и внешние прерывания. Внутренние прерывания вызываются сигналами внутри микропроцессора либо из программы. Внешние прерывания инициируются сигналами, подаваемыми на микропроцессор от микросхем окружения (внешними устройствами).

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

Адрес точки входа в программу обработки прерывания называется вектором прерывания.

Внешние устройства передают сигнал внимания через линию INT( поступают внешние аппаратные прерывания ) или NMI( внутренние ). Процессор реагирует на этот запрос, если флаг прерывания IF установлен в 1 (прерывания разрешены), и (в большинстве случаев) игнорирует запрос, если флаг прерывания IF установлен в 0 (прерывания запрещены).

Прерывания идентифицируются по номеру (от 0 до 255). Каждому прерыванию должен быть поставлен в соответствие обработчик. Адреса обработчиков содержатся в таблице векторов прерываний, которая находится по адресу 0000:0000. Так как в таблице имеется 256 4-х байтовых элементов, то она занимает первые 1024 байт памяти от 0000:0000 до 0000:03FF.

Каждый элемент таблицы указывает на подпрограмму обработки указанного типа прерывания и содержит адрес кодового сегмента и смещение, которые при прерывании устанавливаются в регистры CS и IP соответственно.

Примечание: Прерывания 00-1F относятся к BIOS, а 20-FF - к DOS и BASIC.

По прерыванию процессор сохраняет в стеке содержимое FLAGS, CS и IP, сбрасывает флаги IF и TF, затем вычисляет адрес соответствующего вектора прерывания и извлекает из него адрес обработчика и заносит его в пару CS:IP. Возврат из обработчика осуществляется командой IRET, которая восстанавливает значения FLAGS, CS и IP из стека и передает управление на очередную команду программы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: