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


СМР Сравнение


Сами операнды не изменяются. Таким образом, если команду сравнения записать в общем виде

стр операнд_1, операнд_2


то ее действие можно условно изобразить следующим образом:

операнд_1 - операнд_2 -> флаги процессора

В качестве первого операнда команды сmр можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно, как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Обычно вслед за командой сmр стоит одна из команд условных переходов, анализирующих состояние флагов процесс

сора. При сравнении чисел без знака необходимо использовать команды условных переходов, предназначенные для анализа чисел без знака (ja, jb и проч.). При сравнении чисел со знаком необходимо использовать команды условных переходов, предназначенные для анализа чисел со знаком (jl, jg и проч.).

Пример 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. Таким образом, операцию сравнения можно условно изобразить следующим образом:




Начало  Назад  Вперед



Книжный магазин