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