Команда сравнения
Команда сравнения СМР
имеет интересный принцип работы. Он абсо-
лютно такой же, как у команды вычитания SUB (см. главу 8). Команда СМР так же,
как и команда SUB, выполняет вычитание операндов и по результатам сравнения
устанавливает флаги. Единственное, чего она не делает, — не записывает резуль-
тат вычитания на место первого операнда.
Синтаксис команды
Флаги, устанавливаемые командой СМР, можно анализировать специальными
командами условного перехода. Прежде чем мы их рассмотрим, уделим немного
внимания мнемонике этих команд (табл.
Понимание обозначений (элемен-
тов в названии команды
обозначенных нами символами
при формирова-
нии названия команд условного перехода облегчит их запоминание и дальнейшее
практическое использование.
Таблица
Значение аббревиатур в названии команды jcc
Мнемоническое
обозначение
е
g
1
а
Ь
Оригинальный
термин
Equal
Not
Greater
Less
Above
Below
Перевод
Равно
Нет
Больше
Меньше
Выше (в смысле больше)
Ниже (в смысле меньше)
Тип операндов
Любые
Любые
Числа со знаком
Числа со знаком
Числа без знака
Числа без
В табл. 10.2 представлен перечень команд условного перехода для команды СМР.
Не удивляйтесь тому обстоятельству, что одинаковым значениям флагов соответ-
ствуют несколько разных мнемокодов команд условного перехода (они отделены
друг от друга косой чертой). Разница в названии обусловлена желанием разработ-
8
256
226 Глава
Команды передачи управления
чиков процессора упростить использование команд условного перехода с разны-
ми группами команд. Поэтому разные названия отражают скорее разную функцио-
нальную направленность. Тем не менее, то, что эти команды реагируют на одни
и те же флаги, делает их абсолютно эквивалентными и равноправными в програм-
ме. Именно поэтому они сгруппированы не по названиям, а по значениям флагов
(условиям), на которые они реагируют.
Таблица
Перечень команд условного перехода для команды
Типы
Любые
Любые
Со знаком
Со знаком
Со знаком
Со знаком
Без знака
Без знака
Без знака
Без знака
Мнемокод
команды услов-
ного перехода
JE
JNE
JLE/JNG
JG/JNLE
JB/JNAE
JBE/JNA
JA/JNBE
JAE/JNB
Критерий условного
перехода
операнд_2
операнд_1 <> операнд_2
<
операнд_1 <= операнд_2
> операнд_2
операнд_1 =>
операнд_1 <
операнд_1 <=
операнд_1 >
опсранд_1 =>
Значения флагов
для перехода
ZF 0
SF <> OF
SF <> OF или ZF = 1
SF OF и ZF = 0
SF OF
CF - 0 и ZF - 0
CF = 0
В качестве примера применения команды CMP рассмотрим фрагмент програм-
мы, который обнуляет поле pole_m длиной п байт:
n equ 50
db
n dup (?)
xor
;bx=0
ml:
inc bx
bx,n
jne ml
exit:
Так как команды условного перехода не изменяют флагов, то после одной ко-
манды
вполне могут следовать несколько команд условного перехода. Это
может быть сделано для того, например, чтобы исследовать каждую из альтерна-
тивных ветвей: больше, меньше или равно:
mas db
dup (?)
eql
low
jg
grt
;сравнить очередной элемент массива с
переход, если элемент mas равен 5
если элемент mas меньше 5
если элемент mas больше 5
Условные переходы 227
low:
grt:
Do'stlaringiz bilan baham: |