Регистр Flags содержит девять активных битов (из 16), которые отражают состояние машины и результаты выполнения машинных команд.
Биты : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Регистр: OF DF IF TF SF ZF AF PF CF
------------------------ПРИЗНАКИ---------------------------
OF (переполнения) - равен 1, если возникает арифмети-
ческое переполнение, т.е. когда
об'ем результата превышает размер
ячейки назначения
DF (направления) - устанавливается в 1 для автомати-
ческого декремента в командах обработки строк, и в 0 для инкремента
IF (разрешения
прерывания) - прерывания разрешены, если IF=1.
Если IF=0, то распознаются лишь немаскированные прерывания
TF (трассировки) - если TF=1, то процессор переходит
в состояние прерывания INT 3 после выполнения каждой команды
SF (знака) - SF=1, когда старший бит результа-
та равен 1. Иными словами, SF=0 для положительных чисел, и SF=1 для отрицательных чисел
|
|
ZF (нулевого
результата) - ZF=1, если результат равен нулю
AF (дополнительный
признак переноса) - этот признак устанавливается в 1
во время выполнения команд десятичного сложения и вычитания при необходимости выполнения переноса или заема между полубайтами
PF (четности) - этот признак устанавливается в 1,
если результат имеет четное число единиц
CF (переноса) - этот признак устанавливается в 1,
если имеет место перенос или заем из старшего бита результата; он полезен для произведения операций над числами длиной в несколько слов, которые сопряжены с переносами и заемами из слова в слово.
. Команды условного перехода
JA Переход если выше
Признаки не меняются.
Команда: JA short-label.
Условие перехода: Jump if CF = 0 and ZF = 0.
Команда JA используется после команд CMP и SUB и передает управление по метке short-label, если первый операнд (который должен быть числом без знака) был больше, чем второй операнд (также без знака). Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JA ABOVE
Примечания:
Команда JNBE, переход если не ниже и не равно, - это та же команда, что и JA.
Команду JA, переход если выше, следует использовать при сравнении чисел без знака.
Команду JG, переход если больше, следует использовать при сравнении чисел со знаком.
JAE Переход если выше или равно
|
|
Признаки не меняются.
Команда: JAE short-label.
Условие перехода: Jump if CF = 0
Команда JAE используется после команд CMP или SUB и передает управление по метке short-label, если первый операнд был больше или равен второму. (Оба операнда рассматриваются как числа без знака.) Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JAE ABOVE_EQUAL
------------------------------------------------------------
Примечания:
Команда JNB, переход если не ниже, - это та же команда, что и JAE.
Команду JAE, переход если выше или равно, следует использовать при сравнении чисел без знака.
Команду JGE, переход если больше или равно, следует использовать при сравнении чисел со знаком.
JE Переход если равно
Признаки не меняются.
Команда: JE short-label.
Условие перехода: Jump if ZF = 1.
Команда JE используется после команд CMP и SUB и передает управление по метке short-label, если первый операнд был равен второму. Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JE ZERO
Примечания:
Команда JZ, переход если ноль, - это та же команда, что и JE.
JG Переход если больше
Признаки не меняются.
Команда: JG short-label.
Условие перехода: Jump if ZF = 0 and SF = OF.
Команда JG используется после команд CMP или SUB и передает управление по метке short-label, если первый операнд был больше, чем второй. (Оба операнда рассматриваются как числа со знаком.) Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
--------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JG GREATER
Примечания:
Команда JNLE, переход если не меньше и не равно, - это та же команда, что и JG.
Команду JA, переход если выше, следует использовать при сравнении чисел без знака.
Команду JG, переход если больше, следует использовать при сравнении чисел со знаком.
JGE Переход если больше или равно
Признаки не меняются.
Команда: JGE short-label.
Условие перехода: Jump if SF = OF.
Команда JGE используется после команд CMP или SUB и передает управление по метке short-label, если первый операнд был больше или равен второму. (Оба операнда рассматриваются как числа со знаком.) Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JGE GREATER_EQUAL
Примечания:
Команда JNL, переход если не меньше, - это та же команда, что и JGE.
Команду JAE, переход если выше или равно, следует использовать при сравнении чисел без знака.
Команду JGE, переход если больше или равно, следует использовать при сравнении чисел со знаком.
JL Переход если меньше
Признаки не меняются.
Команда: JL short-label.
Условие перехода: Jump if SF <> OF.
Команда JL используется после команд CMP или SUB и передает управление по метке short-label, если первый операнд был меньше, чем второй. (Оба операнда рассматриваются как числа со знаком.) Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
--------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JL LESS
Примечания:
Команда JNGE, переход если не больше и не равно, - это та же команда, что и JL.
Команду JB, переход если ниже, следует использовать при сравнении чисел без знака.
|
|
Команду JL, переход если меньше, следует использовать при сравнении чисел со знаком.
JLE Переход если меньше или равно
Признаки не меняются.
Команда: JLE short-label.
Условие перехода: Jump if SF <> OF or ZF = 1.
Команда JLE используется после команд CMP или SUB и передает управление по метке short-label, если первый операнд был меньше или равен второму. (Оба операнда рассматриваются как числа со знаком.) Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JLE NOT_GREATER
Примечания:
Команда JNG, переход если не больше, - это та же команда, что и JLE.
Команду JBE, переход если ниже или равно, следует использовать при сравнении чисел без знака.
Команду JLE, переход если меньше или равно, следует использовать при сравнении чисел со знаком.
JNE Переход если не равно
Признаки не меняются.
Команда: JNE short-label.
Условие перехода: Jump if ZF = 0
Команда JNE используется после команд CMP и SUB и передает управление по метке short-label, если первый операнд не был равен второму. Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-----------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JNE NOT_EQUAL
Примечание:
Команда JNZ, переход если не ноль, - это та же команда, что и JNE.
JNG Переход если не больше
Признаки не меняются.
Команда: JNG short-label.
JNG - синоним JLE. См. описание JLE.
JNGE Переход если не больше и не равно
Признаки не меняются.
JNGE short-label.
JNGE - синоним JL. См. описание JL.
JNL Переход если не меньше
Признаки не меняются.
Команда: JNL short-label.
JNL - синоним JGE. См. описание JGE.
JNLE переход если не меньше и не равно
Признаки не меняются.
Команда: JNLE short-label.
JNLE - синоним JG. См. описание JG.
JNO Переход если нет переполнения
Признаки не меняются.
Команда: JNO short-label.
Условие перехода: Jump if OF = 0.
|
|
Команда JNO передает управление по метке short-label, если признак переполнения OF сброшен (т.е. =0). Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JNO NO_OVERFLOW
Примечание:
Пользуйтесь командой JO, переход если переполнение, для перехода в том случае, когда признак переполнения OF установлен (т.е. =1).
JNS Переход если положительный результат
Признаки не меняются.
Команда: JNS short-label.
Условие перехода: Jump if SF = 0.Команда JNS передает управление по метке short-label, если признак знака SF сброшен (т.е. =0). Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JNS AQUARIUS
Примечание:
Пользуйтесь командой JS, переход если отрицательный результат, для перехода в том случае, когда признак знака SF установлен (т.е. =1).
JNZ Переход если не ноль
Признаки не меняются.
Команда: JNZ short-label.
JNZ - синоним JNE. См. описание JNE.
JO Переход если есть переполнение
Признаки не меняются.
Команда: JO short-label.
Условие перехода: Jump if OF = 1.
Команда JO передает управление по метке short-label, если признак переполнения OF установлен (т.е. =1). Цель перехода должна лежать в пределах от -128 до 127 байтов от следующей команды.
--------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 16 или 4 - 2 JO SIGNED_OVERFLOW
Примечание:
Пользуйтесь командой JNO, переход если нет переполнения, для перехода в том случае, когда признак переполнения OF сброшен (т.е. =0).
JZ Переход если ноль
JZ - синоним JE. См. описание JE.
Лекция 9
Организация циклов.
LOOP Переход по счетчику
Признаки не меняются.
LOOP short-label.
логика: CX = CX - 1
if (CX <> 0)
JMP short-label.
Команда LOOP уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно 0. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 17/5 - 2 LOOP AGAIN
2.6.33 LOOPE Переход пока равно
Признаки не меняются.
Команда: LOOPE short-label.
Логика: CX = CX - 1
if (CX <> 0) and (ZF = 1)
JMP short-label.
Команда LOOPE используется после команд CMP или SUB. Она уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно нулю и если первый операнд команд CMP или SUB был равен второму операнду. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 18 или 6 - 2 LOOPE AGAIN
Примечание: Команда LOOPZ, переход пока ноль, - это та же команда, что и LOOPE.
2.6.34 LOOPNE Переход пока не равно
Признаки не меняются.
Команда: LOOPNE short-label.
Логика: CX = CX - 1
if (CX <> 0) and (ZF = 0)
JMP short-label.
Команда LOOPNE используется после команд CMP или SUB. Она уменьшает CX на 1, затем передает управление по метке short-label, если CX не равно нулю и если первый операнд команд CMP или SUB не равен второму операнду. Операнд short-label должен находиться в пределах от -128 до +127 байтов от следующей команды.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
short-label 18 или 6 - 2 LOOPNE AGAIN
Примечания:
Команда LOOPNZ, переход пока не ноль, - это та же команда, что и LOOPNE.
2.6.35 LOOPNZ Переход пока не ноль
LOOPZ - синоним LOOPE. См. описание LOOPE.
Лекции 10,11