На этом шаге мы рассмотрим команду, используемую для сравнения строк.
Команда 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
На следующем шаге приведем пример программы с использованием рассмотренных команд работы со строками.