№ |
Задание |
||||||||||||||||
3 |
Регистр флагов. Назначение и использование флагов. |
||||||||||||||||
Описание |
2.2.3. Регистр флаговФлаги в ВС представляют некоторые признаки, характеризующие состояние микропроцессора или происходящих процессов. Обычно состояния могут характеризоваться наличием или отсутствием некоторого результата и для представления его достаточно иметь один бит информации. Флаги собираются в группы и записываются в специальные регистры, называемые регистром флагов RF (flag register). Анализируя состояния флагов, можно получить информацию о состоянии процессора, о результатах выполнения команд и могут влиять на состояние самого микропроцессора. Эта информация позволяет принять решение о дальнейшем направлении выполнения программы. Для МП 8086 регистр флагов содержит 9 признаков (флагов), характеризующих состояние микропроцессора и происходящих процессов. Их можно разделить на три группы: 6 флагов состояния, два системных и флаг управления. Для однозначного понимания расположения информации в регистрах, номера разрядов обрабатываемых кодов будем считать, что п-разрядные данные имеют нумерация справа налево от 0 до n—1. Структура регистра флагов МП 8086, расположение и их назначение представлено на рисунке 2.3. Рисунок 2.3 – Структура регистра флагов Рассмотрим подробнее назначение и содержимое этих регистров: Флаги состояния и их назначение. Флаги состояния могут изменяться после выполнения машинных команд и отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм. флаг переноса CF (Carry Flag) (0-й разряд) устанавливается в 1, если в результате выполнения операции возник перенос из (n — 1)-го разряда результата в несуществующий старший п-й разряд или потребовался заем из несуществующего п-го разряда. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда. 0 — переноса не было; флаг паритета PF (Parity Flag) (2-й разряд) дополняет код результата до нечетного, т. е. устанавливается в 1, если количество единиц в коде результата с 1 по 8 младшие разряды (этот флаг — только для 8 младших разрядов операнда любого размера) содержит четное число единиц. 0 — 8 младших разрядов результата содержат нечетное число единиц; флаг вспомогательного переноса AF (Auxiliary carry Flag) (4-й разряд) устанавливается в 1, если при выполнении операции сложения произошел перенос из 3 в 4 разряд результата (из младшей тетрады в старшую тетраду) или выполнился заем из 4 в 3 разряд. 0 — переносов и заемов в 3 разряд младшей тетрады или из него не было. Флаг AF используется для выполнения десятичной коррекции результата для команд работающих с BCD-числами; флаг нулевого результата ZF (Zero Flag) (6-й разряд) принимает единичное значение, если все разряды результата нулевые; если хотя бы один разряд результата отличен от нуля, флаг ZF сбрасывается в ноль; флаг знака SF (Sign Flag) (7-й разряд) устанавливается равным старшему (n — 1)-у разряду кода результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно). При выполнении операций над числами со знаком флаг SF соответствует знаку результата - больше либо равен нулю (положительный), SF будег сброшен в 0, если результат меньше нуля (отрицательный) SF будет установлен в 1; флаг переполнения OF (Overflow Flag ) (11-й разряд) используется для фиксирования факта потери значащего бита при арифметических операциях и устанавливается в 1, если в результате выполнения операции происходит переполнение разрядной сетки. Переполнение разрядной сетки будет, если перенос из (n — 2)-го разряда в (n — 1)-й не совпадает с переносом из (n — 1)-го разряда в несуществующий п-й). Таблица 2..1 – Определения состояния переполнения разрядной сетки.
+ - перенос произошел; — - перенос не произошел. Флаг управления. Флаг управления df (Directory Flag)
находится в 10-м бите регистра RF и формирует направления передачи данных при
работе с цепочечными командами, определяя способ изменения адресов
источников/приемников кодов в командах работы со строками данных. Если DF ==
0, то адреса наращиваются (автоинкрементная адресация), если DF == 1 - адреса
уменьшаются (автодекрементная адресация); Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df) Системные флаги. Системные флаги управляют маскируемыми прерываниями и режимом отладки. флаг разрешения прерывания IF (Interrupt enable Flag) (9-й разряд), предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу EINTR). Сброшенный в нулевое состояние, запрещает обработку аппаратных запросов на прерывание, а установленный в единичное — разрешает их; флаг пошагового режима TF (Trace Flag) (8-й разряд), предназначен для организации пошаговой работы процессора. При установке в единичное состояние флага TF, микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды, в котором после обработки каждой команды генерируется программное прерывание системы. Может использоваться при отладке программ, в частности отладчиками, задается специальный режим покомандного выполнения программы. 0 – нормальное состояние флага пошагового режима. |
||||||||||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.