| REP |
| Многократно изпълнение на низов примитив |
| Общи форми: |
REP REPcond |
| |
| Форма |
КОП |
Условие |
I8086 |
I80386 |
I80486 |
| REP |
F3 |
Безусловно |
2 |
1 |
1 |
| REPE |
F3 |
ZF = 1 |
2 |
1 |
1 |
| REPZ |
F3 |
ZF = 1 |
2 |
1 |
1 |
| REPNE |
F2 |
ZF = 0 |
2 |
1 |
1 |
| REPNZ |
F2 |
ZF = 0 |
2 |
1 |
1 |
| REPC |
65 |
CF = 1 |
|
|
|
| REPNC |
64 |
CF = 0 |
|
|
|
|
| Действие: |
Предизвикват многократното изпълнение на низова инструкция. Скоростта на изпълнението е по-висока, отколкото ако това бяха отделни инструкции. За да не се получи обаче загуба на данни, процесорът проверява входовете си IRQ и NMI след всяка итерация и може да прекъсне обработката. Тогава в стека се запазва адресът на инструкцията заедно с всички префикси (а не на следващата), eCX, eSI и eDI се обновяват и процесорът изпълнява манипулатора на прекъсването. Ако по време на итерациите възникне изключение (грешка или капан), то се обработва по същия начин. След връщане инструкцията отново се декодира и итерациите се довършват откъдето са били прекъснати.
За разлика от инструкция LOOP, влизането в тези итерации с eCX = 0 е еквивалентно на NOP.
Префиксите от вида REPcond се използват с инструкциите SCAS и CMPS и прекъсват многократното изпълнение и по-рано, ако бъде нарушено зададеното условие. Условията биват ZF = 1 (изпълнение докато е равно/нула) или ZF = 0 (изпълнение докато е различно/ненула). Префиксите REPC и REPNC в комбинация със SCAS и CMPS дават операции сканиране за по-малко/по-голямо; те се разпознават само от V20.
Еднаквите кодове за REP и REPE не водят до недоразумение, тъй като се използват с различни низови примитиви. Всички префикси имат смисъл на REP, ако примитивът не извършва сравнение (не променя флаговете). Разграничаването се прави само от SCAS и CMPS.
Регистърът, използван за брояч, се определя от размера на адреса и е CX (AddressSize = 16), ECX (AddressSize = 32) или RCX (AddressSize = 64).
|
| Флагове |
| PE |
VM |
NT |
IOPL |
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
| |
|
|
|
|
|
|
|
|
T |
|
|
T |
|
| CPU |
| Префикс |
8086 |
186 |
V20 |
286 |
386 |
486 |
P |
P-P |
P-II |
MMX |
SSE |
3D! |
E64 |
| REP/REPE/REPNE |
• |
• |
• |
• |
• |
• |
• |
• |
• |
|
|
|
• |
| REPC/REPNC |
|
|
• |
|
|
|
|
|
|
|
|
|
|
|
| Изключения |
Изключенията, които предизвиква основната инструкция |