Dan*_*zar 35
方向标志用于影响字符串指令偏移指针寄存器的方向.这些指令可与REP
前缀一起使用以重复操作.(虽然lods
不是很有用rep
).
字符串指令是:( MOVS
复制mem到mem),STOS
(存储AL/AX/EAX/RAX),SCAS
(扫描字符串),CMPS
(比较字符串)和LODS
(加载字符串).还有ins
/ outs
用于在内存和IO端口之间进行复制.这些指令中的每一个都以字节,字,双字和qword操作数大小提供.
概括地说,当方向标志是0,该指令通过递增的指针数据每一次迭代后的工作(直到ECX
为零或一些其它条件,这取决于风味REP
前缀),如果标志是1,而,该指针递减.
例如,movsd
将dword复制[ds:esi]
到[es:edi]
(或64位模式下的rdi),并执行以下操作:(请参阅从英特尔PDF中提取的链接ISA参考手册条目中的"操作"部分)
dword [es:edi] = dword [ds:esi] // 4-byte copy memory to memory
if (DF == 0)
esi += 4;
edi += 4;
else // DF == 1
esi -= 4;
edi -= 4;
fi
Run Code Online (Sandbox Code Playgroud)
使用REP前缀,它执行ECX次,现代x86 CPU优化了"快速字符串"微码,可以stos
使用16字节或32字节内部操作进行复制(或存储).另请参阅此有关内存带宽和ERMSB功能的问答.(请注意,只有rep stos
和rep movs
这种方式进行优化,而不是repne/repe scas
或cmps
).
归档时间: |
|
查看次数: |
53082 次 |
最近记录: |