Команды условного перехода по результату команды сравнения
Для сравнения значений двух операндов применяется команда CMP (от англ. CoMPare – сравнить). Формат команды приведен на рис.9.5.
Рис. 9.5. Формат команды CMP
Эта команда вычитает из первого операнда второй и по результатам вычитания устанавливает флаги, которые определяют отношения между операндами. Эти флаги анализируются с помощью специальных команд условного перехода, которые располагаются сразу за командой сравнения. Мнемоника команд зависит от условий, которые они определяют, и берется по табл.9.1. Размерности операндов в команде CMP должны быть одинаковыми.
Таблица 9.1. Мнемоника команд условного перехода по результату команды сравнения
Символ | Английский | Русский | Тип операндов |
E | Equal | Равно | Любые |
N | Not | Не | Любые |
G | Greater | Больше | Числа со знаком |
L | Less | Меньше | Числа со знаком |
A | Above | Выше | Числа без знака |
B | Below | Ниже | Числа без знака |
Команды условного перехода по результату команды сравнения и проверяемые ими условия приведены в табл.9.2. Через косую черту приведены команды, анализирующие одни и те же флаги и являющиеся эквивалентными.
Таблица 9.2. Команды условного перехода по результату команды сравнения
Тип операндов | Команда | Критерий условного перехода | Значения флагов для перехода |
Любые | JE | ZF = 1 | |
Любые | JNE | ZF = 0 | |
Со знаком | JL/JNGE | SF <> OF | |
Со знаком | JLE/JNG | SF <> OF или ZF = 1 | |
Со знаком | JG/JNLE | SF = OF и ZF = 0 | |
Со знаком | JGE/JNL | SF = OF | |
Без знака | JB/JNAE | CF = 1 | |
Без знака | JBE/JNA | CF = 1 или ZF = 1 | |
Без знака | JA/JNBE | CF = 0 и ZF = 0 | |
Без знака | JAE/JNB | CF = 0 |
Пример использования команд условного перехода по результату команды сравнения:
MOV BX,7
MOV AX,12
CMP AX,BX
JGE m1 ;Переход по метке m1 если AX BX
…
m1:
Так как команды условного перехода не изменяют флагов, то после команды CMP может следовать несколько команд условного перехода, определяющих отношения между одними и теми же операндами:
pole DB 12,25,1,75,120
…
LEA BX,pole
CMP [BX],5 ;Сравнить элемент массива с 5
JE m1 ;Переход если элемент равен 5
JB m2 ;Переход если элемент больше 5
JA m3 ;Переход если элемент меньше 5
m1:
…
m2:
…
m3:
С помощью этих команд можно организовывать циклы, используя регистр CX как счетчик цикла, следующим образом:
MOV CX,10 ;Десять итераций цикла
m1: MOV AX,12
…
DEC CX ;Уменьшение значения на единицу
CMP CX,0 ;Сравнение с нулем
JNE m1 ;Возврат на начало цикла