Справочник по языку Ассемблера IBM PC



CMPS/CMPSB/CMPSW/CMPSD


(CoMPare String Byte/Word/Double word operands)

Сравнение строк байтов/слов/двойных слов

 

Схема команды:  cmps приемник,источник 
cmpsb 
cmpsw 
cmpsd

Назначение: сравнение двух последовательностей (цепочек) элементов в памяти.


Алгоритм работы:

выполнить вычитание элементов (источник - приемник), адреса элементов предварительно должны быть загружены:

адрес источника — в пару регистров ds:esi/si;

адрес назначения — в пару регистров es:edi/di;

в зависимости от состояния флага df изменить значение регистров esi/si и edi/di:

если df=0, то увеличить содержимое этих регистров на длину элемента последовательности;

если df=1, то уменьшить содержимое этих регистров на длину элемента последовательности;

в зависимости от результата вычитания установить флаги:

если очередные элементы цепочек не равны, то cf=1, zf=0;

если очередные элементы цепочек или цепочки в целом равны, то cf=0, zf=1;

при наличии префикса выполнить определяемые им действия (см. команды repe/repne).

Состояние флагов после выполнения команды:

11 07 06 04 02 00
OF SF ZF AF PF CF
r r r r r

Применение:


Команды без префиксов осуществляют простое сравнение двух элементов в памяти. Размеры сравниваемых элементов зависят от применяемой команды. Команда cmps может работать с элементами размером в байт, слово, двойное слово. В качестве операндов в команде указываются идентификаторы последовательностей этих элементов в памяти. Реально эти идентификаторы используются лишь для получения типов элементов последовательностей, а их адреса должны быть предварительно загружены в указанные выше пары регистров. Транслятор, обработав команду cmps и выяснив тип операндов, генерирует одну из машинных команд cmpsb, cmpsw или cmpsd. Машинного аналога для команды cmps нет. Для адресации назначения обязательно должен использоваться регистр es, а для адресации источника можно делать замену сегмента с использованием соответствующего префикса.




Содержание  Назад  Вперед