07. Регистр флагов. - mRrvz/bmstu-asm GitHub Wiki

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

Флаги выставляются при операциях, но не обязательно все сразу. Например INC и DEC не затрагивают флаг CF, в отличии от ADD и SUB.

Также есть команды рассчитанные на флаги, например CMP, которая выставляет флаги такие, как если бы произошло вычитание аргументов.

Как мы помним, регистры у нас размером в 16 бит.

Вот за что отвечает каждый бит в регистре FLAGS:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CF - PF - AF - ZF SF TF IF DF OF IOPL IOPL NT -

■ CF (carry flag) - флаг переноса - устанавливается в 1, если результат предыдущей операции не уместился в приемник и произошел перенос или если требуется заем при вычитании. Иначе 0.

■ PF (parity flag) - флаг чётности - устанавливается в 1, если младший байт результата предыдущей операции содержит четное количество единиц.

■ AF (auxiliary carry flag) - вспомогательный флаг переноса - устанавливается в 1, если в результате предыдущей операции произошел перенос из 3 в 4 или заем из 4 в 3 биты.

■ ZF (zero flag) - флаг нуля - устанавливается в 1, если если результат предыдущей команды равен 0.

■ SF (sign flag) - флаг знака - всегда равен старшему биту результата.

■ TF (trap flag) - флаг трассировки - предусмотрен для работы отладчиков в пошаговом режиме. Если поставить в 1, после каждой команды будет происходить передача управления отладчику.

■ IF (interrupt enable flag) - флаг разрешения прерываний - если 0 процессор перестает обрабатывать прерывания от внешних устройств.

■ DF (direction flag) - флаг направления - контролирует поведение команд обработки строк. Если 0, строки обрабатываются слева направо, если 1 справа налево.

■ OF (overflowflag) - флаг переполнения - устанавливается в 1, если результат предыдущей операции над числами со знаком выходит за допустимые для них пределы.

■ IOPL (I/O privilege level) - уровень приоритета ввода-вывода - а это на 286, на не нужно пока.

■ NT (nested task) - флаг вложенности задач - а это на 286, на не нужно пока.