Иллюстрированный самоучитель по Assembler

R

REP Повторение. REPE Повторение пока равно. REPZ Повторение пока нуль. REPNE Повторение пока равно. REPNZ Повторение пока не равно.

Префиксы повторения, позволяющие организовывать циклическое выполнение команд обработки строк cmps, movs и seas, и при этом проверять наличие указанного в префиксе условия.

Префикс rep, будучи установлен перед строковой командой movs или stos, заставляет ее выполняться СХ раз.

Префикс rере (и полностью эквивалентный ему префикс repz), будучи установлен перед строковой командой cmps или seas, заставляет ее выполняться до тех пор, пока результат выполнения равен 0 и, соответственно, ZF=1, но не более СХ раз.

Префикс rерnе (и полностью эквивалентный ему префикс repnz), будучи установлен перед строковой командой cmps или seas, заставляет ее выполняться до тех пор, пока результат выполнения не равен 0 и, соответственно, ZF=0, но не более СХ раз.

Примеры использования префиксов повторения см. в описаниях строковых команд cmps, movs и seas.

RET Возврат из процедуры. RETN Возврат из ближней процедуры. RETF Возврат из дальней процедуры.

Команда ret извлекает из стека адрес возврата и передает управление назад в программу, первоначально вызвавшую процедуру. Если командой ret завершается ближняя процедура, объявленная с атрибутом near, или используется модификация команды retn, со стека снимается одно слово – относительный адрес точки возврата. Передача управления в этом случае осуществляется в пределах одного программного сегмента. Если командой ret завершается дальняя процедура, объявленная с атрибутом far, или используется модификация команды retf, со стека снимаются два слова: смещение и сегментный адрес точки возврата. В этом случае передача управления может быть межсегментной.

В команду ret может быть включен необязательный операнд (кратный 2), который указывает, на сколько байтов дополнительно смещается указатель стека после возврата в вызывающую программу. Прибавляя эту константу к новому значению SP, команда ret обходит аргументы, помещенные в стек вызывающей программой (для передачи процедуре) перед выполнением команды call. Обе разновидности команды не воздействуют на флаги процессора.

Пример 1:

…
call subr; Вызов подпрограммы
subr proc near
…; Тело процедуры-подпрограммы
ret subr endp

Пример 2:

push AX; Параметр 1, передаваемый в
;подпрограмму
push SI; Параметр 2, передаваемый в
;подпрограмму
call subr; Вызов подпрограммы
…
subr proc near
…
;Извлечение из стека параметров
; (без изменения содержимого SP)
ret 4; Возврат в вызывающую
;программу и снятие со стека
;двух слов с параметрами
subr endp
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.