Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

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

Команда сравнения строк CMPS сопоставляет опе­ранд-источник с операндом-приемником и возвращает результат через флаги. Команда не изменяет значения операндов. Команда имеет формат

CMPS строка_приемник, строка_источник

Команда CMPS сравнивает операнды с помощью их вычитания, а именно вычитается операнд-приемник из операнда-источника.

Для сравнения нескольких элементов команду CMPS надо использовать с префиксом повторения. В данном случае префикс REP не имеет смысла, посколь­ку при его применении во флагах будет возвращен лишь результат сравне­ния двух последних элементов. С командой CMPS надо использовать префиксы REPE (REPZ) или REPNE (REPNZ).

С префиксом REPE строки сравниваются до тех пор, пока либо значение регистра СХ не станет равным нулю, либо не будет найдена пара несовпадающих элементов. Например, команды

CLD

MOV СX, 100

REPE CMPS DEST, SOURCE

будут сравнивать до 100 пар элементов строк SOURCE и DEST с целью найти два несовпадающих элемента.

С префиксом REPNE строки сравниваются до тех пор, пока либо значение регистра СХ не станет равным нулю, либо не будет найдена пара совпадающих элементов. Например, команды

CLD

MOV СХ, 100

REPNE СМРS DEST, SOURCE

будут сравнивать до 100 пар элементов строк SOURCE и DEST с целью найти два совпадающих элемента.

Повторение операций сравнения может завершиться в двух случаях:

1) значение регистра СХ стало равным 0,

2) флаг ZF стал равен 0 (префикс REPE), либо 1 (префикс REPNE).

При этом может понадобиться узнать, какой из слу­чаев имел место. Выяснить причину прекращения сравнений можно путем использования после команды CMPS команды условной передачи управления, проверяющей значение флага ZF. Об этих командах мы поговорим позже.

Ассемблер преобразует команду CMPS либо в команду CMPSB (при сравнении байтов), либо в команду CMPSW (при сравнении слов).

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

Команды сканирования строк позволяют осуществить поиск заданно­го значения в строке. При сканировании строки байтов искомое значение должно находиться в регистре AL, а при сканировании строки слов – в регистре АХ.

Основная команда группы команд сканирования строк SCAS (scan string – сканировать строку) имеет формат

SCAS строка_приемник

Операнд позволяет определить, что представляет собой искомое значение – байт в регистре AL или же слово в регистре АХ.

Строка находится в дополнительном сегменте. Смещение адреса первого элемента строки должно быть помещено в регистр DI.

Для выполнения действий более чем над одним элементом строки надо воспользоваться префиксами повторения REPE (REPZ) или REPNE (REPNZ).

Если искомый элемент обнаружен, то смещение адреса следующего за ним элемента возвращается в регистре DI, а флаг нуля ZF полагает­ся равным 0. С помощью команд условного перехода можно определить, найден такой элемент или не найден.

Ассемблер преобразует команду SCAS либо в команду SCASB (при поиске байта), либо в команду SCASW (при поиске слова).

6.5. Команды загрузки и сохранения строки

Данные команды служат для того, чтобы загрузить элемент строки в регистр или изменить его.

Команда загрузки LODS (load string – загрузить строку) имеет формат

LODS строка_источник

Команда LODS пересылает операнд строка_источник в регистр AL (при пересылке байта) или в регистр АХ (при пересылке слова). Как всегда операнд находится в сегменте данных и адресован регистром SI. После выполнения команды регистр SI изменяется так, чтобы указывать на следующий элемент строки.

Команда LODS имеет сокращенные формы LODSB (load byte string – загрузить строку байтов) и LODSW (load word string – загрузить строку слов).

Команда сохранения строки STOS (Store string – сохранить строку) имеет формат

STOS строка_приемник

Она пересылает байт из регистра AL или слово из регистра АХ в элемент операнда строка-приемник. Операнд находится в дополнительном сегменте и адресуется регистром DI. После выполнения команды регистр DI изменяется так, чтобы указывать на следующий элемент строки.

Будучи повторяемой, команда STOS удобна для заполнения строки заданным значением.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]