На этом шаге мы рассмотрим команду, используемую для сравнения строк.
Команда SCAS "просматривает" строку на нахождение в ней определенного значения байта или слова. Эта команда сравнивает содержимое области памяти (адресуемой регистрами ES:DI) с содержимым регистра AL или AX. В зависимости от значения флага DF команда SCAS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова. Эта команда воздействует на флаги AF, CF, OF, PF, SF и ZF. При использовании префикса REP и значения длины в регистре CX команда SCAS может сканировать строки любой длины. Эту команду удобно применять при решении задач, в которых требуется заменить одни символы на другие.
При выполнении команд CMPS и SCAS возможна установка флагов состояния, так чтобы операция могла прекратиться сразу после обнаружения необходимого условия. Перечислим модификации префикса REP для этих целей:
STRLEN EQU 9 ;Длина поля STRING.
STRING DB 'Assembler'
. . .
CLD ;Установка флага направления в 0.
MOV AL,'m' ;Искомый символ.
MOV CX,STRLEN ;Длина поля STRING.
LEA DI,STRING ;Адрес поля STRING.
REPNE SCASB ;Поиск.
JNZ K20 ;Символ найден?
DEC DI ;Да - уменьшить адрес.
MOV BYTE PTR[DI],20H ;Подставить пробел.
K20: RET
На следующем шаге приведем пример программы с использованием рассмотренных команд работы со строками.