Существует специальный случай использования строковых команд. Есть префикс, специально предназначенный для строковых команд. Также как префикс подавления сегментации, используемый для порождения специальной сегментной адресации, он предшествует обычной команде и модифицирует ее работу. А именно, этот префикс вводит строковую команду в цикл. Мнемоника префикса REP происходит от английского слова Repeat - повторить. Микропроцессор 8088 использует этот префикс в тесной связи с регистром CX, который указывает число повторений команды.
Примером является команда STOSB. Команда
REP STOSB
Такая возможность превращает команду STOS в команду заполнения. Программа помещает заполнитель в регистр AL, счетчик байта в регистр CX, адрес блока в пару регистров ES:DI и сбрасывает флаг направления. Затем команда REP STOSB заполняет блок памяти значением из регистра AL. Такой фрагмент кода показан на Фиг. 4.23.
порождает команду загрузки строк байтов, так же как и команда LODSB.
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:00:49
Фиг. 4.23 Заполнение области памяти Page 1-1
PAGE ,132
TITLE Фиг. 4.23 Заполнение области памяти
0000 CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
;--------------------------------------
; В этом примере область данных BYTE_BLOCK
; заполняется значением 01H
;--------------------------------------
0000 AC LODS EXBYTE ; Загрузка AL из DS:SI
0000 8D 3E 000C R LEA DI, BYTE_BLOCK ; DI <- адрес области данных
0004 B9 0032 90 MOV CX, BYTE_BLOCK_LENGTH
; CX <- размер заполняемой области
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 весьма полезен для работы с другими командами обработки строк.