Регистр флагов Flags и условные переходы

Регистр 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: