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


СМР Сравнение - часть 2



(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) элементами строк, на которых закончились операции сравнения.

Пример 1


;В полях данных сегмента данных, адресуемого через DS:

strl db 'FILE.001' ;1-я строка

;В полях данных сегмента данных, адресуемого через ES:

str2 db 'FILE.012' ;2-я строка

;В программном сегменте:

eld ;Сравнение вперед

mov SI,offset strl ;DS:SI ® strl

mov DI, off set str2 ;ES:DI ® str2

mov CX,8 ;Длина сравниваемых строк

repe cmpsb ;Поиск различия в строках

je equal ;Переход, если строки

;совпадают

notequ: ;Продолжение, если строки

;не совпадают


В примере 1 строки не совпадают, и команда je выполнена не будет. После завершения сравнения строк управление будет передано на метку notequ. Содержимое регистров в этой точке: СХ=1 (так как не выполнено сравнение одной последней пары символов), SI = <смещение strl> + 7, DI = <смещение strl> + 7 (выполнено сравнение 7 пар символов).

Пример 2


;В полях данных сегмента данных, адресуемого через DS:

strl db '12345678*90' ;1-я строка

;В полях данных сегмента данных, адресуемого через ES:




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



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