Команда сравнения строк. Использование команд условного перехода
Операция сравнения цепочек Команды, реализующие эту операцию-примитив, производят сравнение элементов цепочки-источника с элементами цепочки-приемника. Здесь ситуация с набором команд и методами работы с ними аналогична операции-примитиву пересылки цепочек. ASM предоставляет программисту четыре команды сравнения цепочек, работающие с разными размерами элементов цепочки: cmps адрес_приемника,адрес_источника(CoMPare String) — сравнить строки; cmpsb (CoMPare String Byte) — сравнить строку байт; cmpsw (CoMPare String Word) — сравнить строку слов; cmpsd (CoMPare String Double word) — сравнить строку двойных слов. Команда cmps Синтаксис команды cmps: cmps адрес_приемника,адрес_источника Здесь: адрес_источника определяет цепочку-источник в сегменте данных. Адрес цепочки должен быть заранее загружен в пару ds:si; адрес_приемника определяет цепочку-приемник. Цепочка должна находиться в дополнительном сегменте, и ее адрес должен быть заранее загружен в пару es:di. Алгоритм работы команды cmps заключается в последовательном выполнении вычитания (элемент цепочки-источника — элемент цепочки-получателя) над очередными элементами обеих цепочек. Принцип выполнения вычитания командой cmps аналогичен команде сравнения cmp. Она, так же, как и cmp, производит вычитание элементов, не записывая при этом результата, и устанавливает флаги zf, sf и of. После выполнения вычитания очередных элементов цепочек командой cmps, индексные регистры si и di автоматически изменяются в соответствии со значением флага df на значение, равное размеру элемента сравниваемых цепочек. Существует возможность еще больше конкретизировать информацию о причине, приведшей к окончанию операции сравнения. Сделать это можно с помощью команд условной передачи управления (табл. 1 и 2). Таблица 1. Сочетание команд условной передачи управления с результатами команды cmps (для чисел со знаком) Причина прекращения операции сравнения Команда условного перехода, реализующая переход по этой причине операнд_источник > операнд_приемник jg операнд_источник = операнд_приемник je операнд_источник <> операнд_приемник jne операнд_источник < операнд_приемник jl операнд_источник <= операнд_приемник jle операнд_источник >= операнд_приемник jge Таблица 2. Сочетание команд условной передачи управления с результатами команды cmps (для чисел без знака) Причина прекращения операции сравнения Команда условного перехода, реализующая переход по этой причине операнд_источник > операнд_приемник ja операнд_источник = операнд_приемник je операнд_источник <> операнд_приемник jne операнд_источник < операнд_приемник jb операнд_источник <= операнд_приемник jbe операнд_источник >= операнд_приемник jae
|