Хелпикс

Главная

Контакты

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





Альтернативное кодирование. Дублирование образца



Альтернативное кодирование

При использовании команд MOVSB или MOVSW Ассемблер предполагает наличие корректной длины строковых данных и не требует кодирования операндов в команде. Для команды MOVS длина должна быть закодирована в операндах. Например, если поля FLDA и FLDB определены как байтовые (DB), то команда REP MOVS FLDA,FLDB предполагает повторяющуюся пересылку байтов из поля FLDB в поле FLDA. Эту команду можно записать также в следующем виде:

 

REP MOVS ES:BYTE PTR[DI],DS:[SI]

 

загрузка регистров DI и SI адресами FLDA и FLDB oбязательна в любом случае.

 

Дублирование образца

Команда STOS бывает полезна для установки в некоторой области oпределенных значений байтов и слов. Для дублирования образца, длина которого превышает размер слова, можно использовать команду MOVS с небольшой модификацией. Предположим, что необходимо сформировать строку следующего вида:

***---***---***---***---***---

...

Вместо того, чтобы определять полностью всю строку, можно определить только первые шесть байтов. Закодируем образец непосредственно перед обрабатываемой строкой следующим образом:

 

PATTERN DB '***---'

DISAREA DB 42 DUP(?)

.

.

CLD

MOV CX,21

LEA DI,DISAREA

LEA SI,PATTERN

REP MOVSW

В процессе выполнения команда MOVSW сначала пересылает первое слово (**) из образца PATTERN в первое слово области DISAREA, затем — второе слово (*-), потом третье (--).

К этому моменту регистр DI будет содержать адрес DISAREA+6, а pегистр SI — PATTERN+6, который также является адресом DISAREA. Затем команда MOVSW автоматически дублирует образец, пересылая первое слово из DISAREA в DISAREA+6, из DISAREA+2, в DISAREA+8, из DISAREA+4 в DISAREA+10 и так далее. В результате образец будет полностью продублирован по всей области DISAREA.



  

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