REP
重复字符串操作( 前缀)
stableVMJITAOTinstruction
这是前缀而非指令:它修饰其后的指令,本身没有编码。
说明
重复字符串指示计数器中指定的次数。 计数寄存器是CX,ECX,或RCX,视指令的地址大小而定. REP(repeat)mnemonic是一个前缀,可以添加到INS,OUTS,MOVS,LODS,以及STOS指令中.
REP前缀仅适用于一次一个字符串指令. 要重复一个指令块,请使用 LOOP 指令或其他循环构造. REP前缀导致相关指令被重复,直到寄存器中的计数降为0.
每个字符串指令都使用源地址,目的地地址,或者两者兼有. 源地址为DS:SI,DS:ESI,或DS:RSI,视指令地址大小而定;DS段可能被指令前缀所压倒. 目的地地址为ES:DI,ES:EDI,或ES:RDI,视指令的地址大小而定;ES段可能不会被覆盖. (注意,在64位模式中,CS,DS,ES,和SS部分的基址被作为零处理. )
同样,计数器的大小是指令的地址大小. 因此,64位模式的默认计数寄存器是RCX; REX.W对地址大小和计数寄存器没有影响. 如果使用 67H 来覆盖默认地址大小,则计数寄存器的大小也会被覆盖.
重复的字符串操作可以通过例外或中断中止. 当这种情况发生时,登记册状态得到保存,以便在从例外或中断处理器返回时恢复字符串操作。 源和目的注册点指要运行的下一个字符串元素,EIP注册点指字符串指令,ECX注册点在指令上次成功迭代后拥有的值. 这种机制允许长弦操作在不影响系统中断响应时间的情况下进行.
谨慎使用 REP INS 和 REP OUTS 指令. 并非所有 I/O 端口都能使用 句柄 执行这些指令的速度 。 注意REP STOS指令是快速初始化大块内存的方法.
REP INS可以在不写给内存位置的情况下从I/O端口读取,如果由于写出(如#PF)而发生例外或VM退出. 如果这有问题,例如因为I/O端口读取有副作用,软件应该确保写入内存位置不会引起例外或VM退出.
行动
IF AddressSize = 16
THEN
Use CX for CountReg;
Implicit Source/Dest operand for memory use of SI/DI;
ELSE IF AddressSize = 64
THEN Use RCX for CountReg;
Implicit Source/Dest operand for memory use of RSI/RDI;
ELSE
Use ECX for CountReg;
Implicit Source/Dest operand for memory use of ESI/EDI;
FI;
WHILE CountReg 0
DO
Service pending interrupts (if any);
Execute associated string instruction;
CountReg := (CountReg 1);
OD;受影响的旗帜
None.
异常
实地址模式
| 例外可以通过与前缀相关的指令产生. |
保护模式
| 例外可以通过与前缀相关的指令产生. |
虚拟 8086 模式
| 例外可以通过与前缀相关的指令产生. |
兼容模式
| 例外可以通过与前缀相关的指令产生. |
64 位模式
| 例外可以通过与前缀相关的指令产生. |