Mov es,ax

Mov ds,ax

Code

Data

Lodsd

Lodsw

Lodsb

Загрузка элемента строки в аккумулятор

Repne scas string

Mov cx, 6

Mov es, ax

Lea di, string

Cld

Code

Data

Scasd

Scasw

Scasb

Сканирование строки

Mov cx, 9

Lea di, string2

Lea si, string1

Cld

Mov es, ax

Mov ds, ax

Code

Data

Пример.

Cmpsd

Cmpsw

Cmpsb

Команды сравнения строк

End main

 

 

 

 

cmps <адрес приемника>, <адрес источника>

 

Алгоритм работы команды заключается в последовательном выполнении команды вычитания (элемент источника – элемент приемника) элементов цепочек. По результатам вычитания устанавливаются флаги zf. Адрес источника записывается в ds:si, адрес приемника в es:di. В cx указывается количество сравниваемых элементов.

 

Перед командой сравнения можно использовать префиксы повторения.

REP MOVS – пересылка происходит до тех пор, пока cx<>0

 

REPE MOVS – пересылка происходит при условии: cx<>0и zf =1.

Применяется для поиска несовпадающихэлементов.

 

REPNE MOVS – пересылка продолжается пока выполняется условие: cx<>0 и zf=0. Применяется для поиска совпадающих элементов в строках.

 

Сравнить две строки и определить их совпадение

string1 db “1 2 3 4 5 6 7 8 9”

string2 db “1 2 3 4 5 6 7 8 9”

assume ds:data, es:data

main:

mov ax, @data

repe cmps string1, string2 ;сравнение пока CX<>0 и ZF=1

jcxz m1 ; вывести сообщение о совпадении если CX=0

jne m2 ; вывести сообщение о несовпадении если ZF=0

:

.

m1:

;вывод сообщения о совпадении строк

.

m2:

;вывод сообщения о несовпадении строк

 

 

Команда производит поиск некоторого значения в области памяти. Искомое значение предварительно должно быть загружено в регистр AL, AX либо в EAX. Выбор регистра должен быть согласован с размером элемента строки, в которой осуществляется поиск.

 

scas <адрес>

Строка должна располагаться в дополнительном сегменте по адресу ES:DI. В процессе поиска выполняется вычитание из аккумулятора очередного элемента строки и устанавливаются флаги (по результату вычитания). Можно использовать префиксы REPE и REPNE.

 

Пример:

 

string db “строка”

……….

……..

mov ax, @data

mov al, ‘a’

je mes ; zf=1 вывести сообщение о том, что символ найден

 

mes:

; вывод на экран сообщения

Команда загружает элемент строки в аккумулятор AL. Эту команду удобно использовать с помощью команд сканирования, сравнения, которые локализуют место искомого компонента строки. Строка должна быть помещена по адресу ES:SI

 

lods <адрес>

 

Пример программы, которая сравнивает две строки и первый не совпавшийэлемент строки помещает в аккумулятор:

 

string1 db ‘1 2 3 4 5 6,$’

string2 db ‘1 2 3 8 5 6,$’

mes db ‘элементы совпали, $’

assume ds:data, es:data

main:

mov ax,@data