Указатель команд и регистр флагов
IP – указатель команд, выполняет роль счетчика команд; его содержимое – это смещение относительно начального адреса сегмента команд (CS).
Во время выполнения программы содержимое регистра IP изменяется и всегда хранит адрес следующей выбираемой для выполнения команды.
Flags (PSW) – регистр флагов, содержит информацию о текущем состоянии МП. Рассмотрим структуру регистра флагов подробнее (см. рис.3).
Flags | OF | DF | IF | TF | SF | ZF | AF | PF | CF | ||||||||||
Рис.3
Флаги разделяют на:
- условные (флаги условий), отражающие результаты выполнения предыдущей команды в АЛУ и используемые в командах условных переходов;
- управляющие (флаги управления), от которых зависит выполнение специальных функций МП.
Условные флаги перечислим в алфавитном порядке.
AF (Auxiliary Carry flag) – флаг вспомогательного переноса, предназначенный для обработки чисел в BCD-формате, используется при выполнении арифметических операций над числами длиной 1 байт для индикации переноса из младшей тетрады в старшую (или займа из старшей тетрады). Здесь BCD (Binary Coded Decimal) – двоично-десятичное представление чисел.
CF (Carry flag) – флаг переноса, предназначен для индикации переноса из старшего байта, используется в операндах, разрядность которых больше 16 бит.
OF (Overflow flag) – флаг переполнения, предназначен для индикации переполнения результатов при выполнении арифметических операций. При сложении он устанавливается в 1, если есть перенос в старший бит, но нет переноса из старшего бита.
PF (Parity flag) – флаг четности, используется как контрольный бит, устанавливается в 1, если младший байт содержит четное число единиц.
SF (Sign flag) – флаг знака, равен 1 для отрицательного результата.
ZF (Zero flag) – признак нулевого результата.
Управляющие флаги устанавливаются программным путем и используются для изменения состояния МП.
DF (Direction flag) – флаг направления, применяется в командах обработки строк. При DF=1 обработка осуществляется от наибольшего адреса к меньшему, а при DF=0 – от начала к концу.
Установка флага осуществляется следующими командами ассемблера
Команда | Устанавливает значение DF |
STD | |
CLD |
IF (Interrupt-Enable flag) – разрешение прерывания, используется для разрешения или запрета обработки внешнего маскируемого прерывания. Устанавливается командами ассемблера
Команда | Значение IF | Результат установки |
STI | Обработка прерывания разрешена | |
CLI | Обработка прерывания запрещена |
TF (Trap flag) – трассировка, используется для осуществления покомандного (пошагового) выполнения программы. При TF=1 МП автоматически вырабатывает внутренние прерывания после каждой команды, что удобно для отладочного режима выполнения программы. Изменение состояния флага TF не выполняется одной командой, а требует последовательности специальных команд, которые будут рассмотрены ниже.