Основы логики и построения базовых логических схем. Архитектура микропроцессора 8086 и основы языка Ассемблер (Контрольные задания по курсу "ЭВМ и микропроцессорные системы"), страница 2

Задание

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 – Определения состояния переполнения разрядной сетки.

Перенос из (n — 2)-го разряда в (n — 1)-й

переносом из (n — 1)-го разряда в несуществующий п-й.

Переполнение разрядной сетки

+

+

Нет переполнения

Нет переполнения

+

Переполнение

+

Переполнение

               + - перенос произошел;  — - перенос не произошел.

Флаг управления. Флаг управления df (Directory Flag) находится в 10-м бите регистра RF и формирует направления передачи данных при работе с  цепочечными командами, определяя способ изменения адресов источников/приемников кодов в командах ра­боты со строками данных. Если DF == 0, то адреса наращиваются (автоинкрементная адресация), если DF == 1 - адреса уменьша­ются (автодекрементная адресация);
 Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1), что обеспечивает автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками;

Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df)

Системные флаги. Системные флаги управляют маскируемыми прерываниями и режимом отладки.

флаг разрешения прерывания IF (Interrupt enable Flag) (9-й  разряд),  предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу EINTR). Сброшенный в нулевое состояние, запрещает обработку аппаратных запросов на прерывание, а установленный в единичное — разрешает их;

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