Хелпикс

Главная

Контакты

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





MOVS: Пересылка строк. LODS: Загрузка строки



MOVS: Пересылка строк

Команда MOVS с префиксом REP и длиной в регистре CX может выполнять пересылку любого числа символов. Для области, принимающей строку, сегментным регистром, является pегистр ES, а регистр DI содержит относительный адрес области, передающей строку. Сегментным регистром является регистр DS, а регистр SI содержит относительный адрес. Таким образом, в начале программы перед выполнением команды MOVS необходимо инициализировать регистр ES вместе с регистром DS, а также загрузить требуемые относительные адреса полей в регистры DI и SI.

В зависимости от состояния флага DF команда MOVS производит увеличение или уменьшение на 1 (для байта) или на 2 (для слова) содержимого регистров DI и SI. Приведем команды, эквивалентные цепочечной команде REP MOVSB:

JCXZ LABEL2

LABEL1: MOV AL,[SI]

MOV [DI],AL

INC/DEC DI ;Инкремент или декремент

UNC/DEC SI ;Инкремент или декремент

LOOP LABEL1

LABEL2: ...

 

LODS: Загрузка строки

Команда LODS загружает из памяти в регистр AL один байт или в регистр AX одно слово. Адрес памяти определяется регистрами DS:SI. В зависимости от значения флага DF происходит увеличение или уменьшение регистра SI.

Поскольку одна команда LODS загружает регистр, то практической пользы от префикса REP в данном случае нет. Часто простая команда MOV полностью адекватна команде LODS, хотя MOV генерирует три байта машинного кода, а LODS — только один, но требует инициализацию регистра SI. Можно использовать команду LODS в том случае, когда требуется продвигаться вдоль строки (по байту или по слову), проверяя загружаемый регистр на конкретное значение.

Команды, эквивалентные команде LODSB:

MOV AL,[SI]

INC SI

 



  

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