Справочник по языку Ассемблера IBM PC

     

Команда сравнения cmp


Команда сравнения cmp имеет интересный принцип работы. Он абсолютно такой же, как и у команды вычитания.


sub операнд_1,операнд_2. Команда cmp так же, как и команда sub, выполняет вычитание операндов и устанавливает флаги. Единственное, чего она не делает — это запись результата вычитания на место первого операнда.

Синтаксис команды cmp:


cmp операнд_1,операнд_2 (compare) — сравнивает два операнда и по результатам сравнения устанавливает флаги.

Флаги, устанавливаемые командой cmp, можно анализировать специальными командами условного перехода. Прежде чем мы их рассмотрим, уделим немного внимания мнемонике этих команд условного перехода (табл. 1). Понимание обозначений при формировании названия команд условного перехода (элемент в названии команды jcc, обозначенный нами cc) облегчит их запоминание и дальнейшее практическое использование.

Таблица 1. Значение аббревиатур в названии команды jcc



Мнемоническое обозначение Английский Русский Тип операндов
E e equal Равно Любые
N n not Не Любые
G g greater Больше Числа со знаком
L l less Меньше Числа со знаком
A a above Выше, в смысле “больше” Числа без знака
B b below Ниже, в смысле “меньше” Числа без знака

Таблица 2. Перечень команд условного перехода для команды cmp операнд_1,операнд_2

Типы операндов Мнемокод команды условного перехода Критерий условного перехода Значения флагов для осществления перехода
Любые je  операнд_1 = операнд_2  zf = 1 
Любые  jne  операнд_1<>операнд_2  zf = 0 
Со знаком  jl/jnge  операнд_1 < операнд_2  sf <> of
Со знаком  jle/jng  операнд_1 <= операнд_2  sf <> of or zf = 1 
Со знаком  jg/jnle  операнд_1 > операнд_2  sf = of and zf = 0
Со знаком  jge/jnl  операнд_1 => операнд_2  sf = of 
Без знака  jb/jnae  операнд_1 < операнд_2  cf = 1 
Без знака  jbe/jna  операнд_1 <= операнд_2  cf = 1 or zf=1 
Без знака  ja/jnbe  операнд_1 > операнд_2  cf = 0 and zf = 0 
Без знака  jae/jnb  операнд_1 => операнд_2  cf = 0 

Не удивляйтесь тому обстоятельству, что одинаковым значениям флагов соответствует несколько разных мнемокодов команд условного перехода (они отделены друг от друга косой чертой в табл. 2).


Разница в названии обусловлена желанием разработчиков микропроцессора облегчить использование команд условного перехода в сочетании с определенными группами команд. Поэтому разные названия отражают скорее различную функциональную направленность. Тем не менее, то, что эти команды реагируют на одни и те же флаги делает их абсолютно эквивалентными и равноправными в программе. Поэтому в табл. 2 они сгруппированы не по названиям, а по значениям флагов (условиям), на которые они реагируют. 



Содержание раздела