Меню сайта

Урок 68. Префикс REP

Существует специальный случайиспользования строковых команд. — Есть
— — — префикс, специально предназначенный длястроковых команд. — Также
— — — как префикс подавления сегментации,используемый для порождения
— — — специальной сегментной адресации, онпредшествует обычной команде и
— — — модифицирует ее работу. — А именно, этот префикс вводит строковую
— — — команду в цикл. — Мнемоника префикса REP происходит от английского
— — — слова Repeat — повторить. — Микропроцессор 8088 использует этот
— — — префикс в тесной связи с регистром CX,который указывает число
— — — повторений команды.

— — — — — Примером является команда STOSB. Команда

— — — — — REP STOSB

— — — — — есть специальная форма команды записибайта. Эта команда
— — — повторяется до тех пор, пока содержимоерегистра CX не уменьшится
— — — до 0. Команда STOSB записывает байт изрегистра AL в ячейку памяти,
— — — которая указывается парой регистров ES:DI,а затем увеличивает или
— — — уменьшает регистр DI на единицу так же,как и обычная команда
— — — STOSB. Затем префикс REP уменьшает регистрCX, и если он теперь не
— — — нуль, повторяет всю команду целиком.Запись строки повторяется до
— — — тех пор, пока регистр CX не достигнетнуля.

— — — — — Такая возможность превращает команду STOSв команду заполнения.
— — — Программа помещает заполнитель в регистрAL, счетчик байта в
— — — регистр CX, адрес блока в пару регистровES:DI и сбрасывает флаг
— — — направления. Затем команда REP STOSBзаполняет блок памяти
— — — значением из регистра AL. Такой фрагменткода показан на Фиг. 4.23.

— — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — 1/1/80 04:01:31
— — — — — — — -Фиг. 4.23 Заполнение области памяти — — — — — — — — — — — — — Page — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.23 Заполнение области памяти
— — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE,ES:CODE

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —————————————
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — В этом примере область данных BYTE_BLOCK
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — заполняется значением 01H
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —————————————

— — — — — — — — -0000 — 8D 3E 000C R — — — — — — — — — — — — — — -LEA — — — — DI, BYTE_BLOCK — — — — — — -DI &lt— адрес области данных
— — — — — — — — -0004 — B9 0032 90 — — — — — — — — — — — — — — — — — MOV — — — — CX,BYTE_BLOCK_LENGTH — — — CX &lt— размерзаполняемой области
— — — — — — — — -0008 — B0 01 — — — — — — — — — — — — — — — — MOV — — — — AL, 01H — — — — — — — — — — — — — Символ для заполнения
— — — — — — — — -000A — F3/ AA — — — — — — — — -REP — — — — STOS — — — BYTE_BLOCK — — — — — — — — — — — — — — — Заполнение

— — — — — — — — -000C — 0032[ — — — — — — — — — -BYTE_BLOCK — — — — — — DB — — — — — — — — 50 DUP(?)
— — — — — — — — — — — — — — — — — ??
— — — — — — — — — — — — — — — — — — — — — — — — — — — ]

— — — — — — — — -= 0032 — — — — — — — — — — — — — — — BYTE_BLOCK_LENGTH — — — — — EQU — — — — $-BYTE_BLOCK

— — — — — — — — -003E — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — Фиг. 4.23 Заполне
ние блока

— — — — — В случае команды LODS префикс REP не имеетсмысла. Загрузка
— — — непрерывной строки данных в аккумулятор недает программе
— — — возможности иметь дело с данными по мереих поступления. Однако
— — — префикс REP весьма полезен для работы сдругими командами обработки
— — — строк.

Категория: Программирование на Ассемблере | Дата: 05.02.13

Меню раздела
Блок