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

6.1. Команды пересылки строк movs, movsb, movsw

Команда MOVS копирует байт или слово из одной части памяти в другую. Она имеет формат

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

Здесь строка­_источник – строка в сегменте данных, а строка_приемник – строка в дополнительном сегменте.

Команда MOVS копирует один элемент сегмента данных, адрес которого находится в регистре SI, в ячейку дополнительного сегмента, адрес которой находится в регистре DI.

После пересылки элемента команда MOVS изменяет указатели строки-источника SI и строки-приемника DI. Если флаг DF равен 0, то микропроцессор 8088 увеличивает значе­ния регистров SI и DI после пересылки и тем самым адресуется к следующим элементам памяти. Если флаг DF равен 1, то микропроцессор уменьшает значения регистров SI и DI после пересылки и тем самым адресуется к предыдущему эле­менту памяти.

Команды MOVSB и MOVSW выполняют аналогичные действия. При этом первая команда оперирует элементами длиной в байт, а вторая – элементами длиной в слово. В этих командах не требу­ются операнды. Они имеют следующий формат:

MOVSB, MOVSW.

Аналогично все остальные примитивы также представлены тремя разными командами. Первая из них имеет один или два операнда (например, MOVS имеет два операнда), а две остальные не имеют операндов (например, MOVSB и MOVSW). Микропроцессор 8088 может исполнять только те команды обработки строк, которые не имеют операндов. При трансляции программы Ассемблер всегда преобразует команду с операндами в одну из команд без операндов.

Как узнает Ассемблер, что пересылается командой MOVS – байты или слова? Он определяет это по типу меток источника и приемника, указанных в поле операнда.

Если эти метки были определены с помощью псевдооператоров DB, то Ассемб­лер преобразует MOVS в команду MOVSB. Если они были определены с помощью псевдооператоров DW, то Ассемблер преобразует MOVS в команду MOVSW.

Так как размер элементов – единственная полезная информация, извлекаемая Ассемблером из команды MOVS, то применение команд MOVSB и MOVSW предпочтительнее, поскольку в этом случае Ассемблеру нет необходимости выяснять размер операндов.

6.2. Префиксы повторения

Можно сделать так, чтобы одна коман­да обработки строк обработала группу последовательных элементов памяти. Для этого перед ней надо указать префикс повторения REP.

Он представляет собой не команду, а однобайтовый модификатор, который заставляет микропро­цессор 8088 выполнить аппаратные повторения команды обработки строк. Это значительно сокращает время на обработку длинных строк по сравнению с прог­раммно-организованными циклами.

Число повторений извлекается из регистра СХ. После очередного выполнения команды значение в регистре СХ уменьшается на единицу.

Напри­мер, последовательность команд

МOV СХ, 500

REP MOVS DEST, SOURCE

заставит микропроцессор 8088 выполнить команду MOVS 500 раз.

Префиксы повторения REPE/REPZ и REPNE/REPNZ используются при "решении" о продолжении или прекращении повторений флаг нуля ZF. Они используются только с командам сравнения строк и поиска значения в строке, которые воздей­ствуют на флаг ZF.

Префикс REPE (повторять, пока равно), имеющий синоним REPZ (повторять, пока нуль), повторяет команду, пока флаг ZF равен 1 и значение регистра СХ не равно 0.

Действия префикса REPNE (повторять, пока не равно), имеющего синоним REPNZ (повторять, пока не нуль), проти­воположно действию префикса REPE. Иначе говоря, префикс REPNE обеспечивает повторение модифицированной им команды, пока флаг ZF равен 0 и значение регистра СХ не равно 0.

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