Иллюстрированный самоучитель по Assembler

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

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › C Допустимо использование 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) элементами строк, на которых закончились операции сравнения.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.