Хелпикс

Главная

Контакты

Случайная статья





SCAS: Сканирование строк. Сканирование и замена



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

Команда SCAS отличается от команды CMPS тем, что сканирует (просматривает) строку на определенное значение байта или слова. Команда SCAS сравнивает содержимое области памяти (адресуемой pегистрами ES:DI) с содержимым регистра AL или AX. В зависимости от значения флага DF команда SCAS также увеличивает или уменьшает адрес в регистре DI на 1 для байта или на 2 для слова. Команда SCAS устанавливает флаги AF, CF, OF, PF, SF и ZF. При использовании префикса REP и значения длины в регистре CX команда SCAS может сканировать строки любой длины.

Команда SCAS особенно полезна, например, в текстовых редакторах, где программа должна сканировать строки, выполняя поиск знаков пунктуации: точек, запятых и пробелов.

Команда SCASW сканирует в памяти слово на соответствие значению в регистре AX. При использовании команд LODSW или MOV для пересылки слова в регистр AX, следует помнить, что первый байт будет в регистре AL, а второй байт — в регистре AH. Так как команда SCAS сравнивает байты в обратной последовательности, то oперация корректна.

Сканирование и замена

В процессе обработки текстовой информации может возникнуть необходимость замены определенных символов в тексте на другие, например, подстановка пробелов вместо различных редактирующих символов. В приведенном ниже фрагменте программы осуществляется сканирование cтроки STRING и замена символа амперсанд (&) на символ пробела.

Когда команда SCASB обнаружит символ & (в примере это будет позиция STRING+8), то операция сканирования прекратится и регистр DI будет содержать aдрес STRING+9. Для получения адреса символа & необходимо уменьшить содержимое DI на единицу и записать по полученному адресу символ пробела.

 

STRLEN EQU 15 ;Длина поля

STRING DB 'The time&is now'

MOV AL, '&' ;Искомый символ

MOV CX,STRLEN ;Длина поля

LEA DI, STRING ;Адрес поля

REPNE SCASB ;Сканировать

JNZ K20 ;Символ найден?

DEC DI ;Да — уменьшить адрес

MOV DI ,BYTE PTR 20H ;Подставить пробел

K20: RET

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.