C
Пример 1:
cmp АХ,10000; АХ-10000 je eqlOOOO; Переход на метку eql0000, ;если АХ=10000
Пример 2:
;В полях данных: base dw 8002h ;В программном сегменте: cmp DX,base DX-base jb below; Переход на метку below, ;если DX, рассматриваемое ;как число без знака, меньше ;числа без знака 8002h=32770
Пример 3:
;В полях данных: base dw 8002h ;В программном сегменте: cmp DX,base DX-base jl less; Переход на метку less, если ;DX, рассматриваемое как ;число со знаком, меньше ;числа со знаком 8002h=-32766
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.
Пример:
cmp EAX,8000000 Oh ja above; Переход, если ;EAX=80000001h…FFFFFFFFh
CMPS Сравнение строк. CMPSB Сравнение строк по байтам. CMPSW Сравнение строк по словам.
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они сравнивают по одному элементу каждой строки, фактически осуществляя вычитание второго операнда из первого и устанавливая в соответствии с результатом вычитания флаги CF, PF, AF, ZF, SF и OF. Команда cmpsb выполняет сравнение по байтам, команда cmpsw – по словам, а команда cmps может быть использована для сравнения как байтов, так и слов. В последнем случае размер сравниваемых элементов определяется их описанием (с помощью директив db или dw). Первый операнд адресуется через DS:SI, второй – через ES:DI. Таким образом, операцию сравнения можно условно изобразить следующим образом:
(DS:SI) – (ES:DI) › флаги процессора
После каждой операции сравнения регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера сравниваемых элементов (байт или слово).
Вариант команды cmps имеет формат:
cmps строка_1, строка_2
(Что не избавляет от необходимости инициализировать регистры DS:SI и ES:DI адресами строк строка_1 и строка_2 соответственно). В этом формате возможна замена сегмента первой строки:
cmps ES:строка_ 1, строка_2
Рассматриваемые команды могут предваряться префиксами повторения repe/repz (повторять, пока элементы равны, т.е. до первого неравенства) и repne/repiiz (повторять, пока элементы не равны, т.е. до первого равенства). В любом случае выполняется не более СХ операций над последовательными элементами.
После выполнения рассматриваемых команд регистры SI и DI указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=1) элементами строк, на которых закончились операции сравнения.