¾ 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 из стека и передает управление на очередную команду программы.