2022年2022年汇编语言重复字符串操作前缀 .pdf
-
资源ID:32497863
资源大小:71.36KB
全文页数:4页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年2022年汇编语言重复字符串操作前缀 .pdf
REP/REPE/REPZ/REPNE/REPNZ - 重复字符串操作前缀操作码指令说明F3 6C REP INS r/m8, DX 将 (E)CX 个字节从端口DX 输入到ES:(E)DI F3 6D REP INS r/m16,DX 将 (E)CX 个字从端口DX 输入到ES:(E)DI F3 6D REP INS r/m32,DX 将 (E)CX 个双字从端口DX 输入到ES:(E)DI F3 A4 REP MOVS m8,m8将 (E)CX 个字节从DS:(E)SI 移到ES:(E)DI F3 A5 REP MOVS m16,m16将 (E)CX 个字从DS:(E)SI 移到ES:(E)DI F3 A5 REP MOVS m32,m32将 (E)CX 个双字从DS:(E)SI 移到ES:(E)DI F3 6E REP OUTS DX,r/m8将 (E)CX 个字节从DS:(E)SI 输出到端口DX F3 6F REP OUTS DX,r/m16将 (E)CX 个字从DS:(E)SI 输出到端口DX F3 6F REP OUTS DX,r/m32将 (E)CX 个双字从DS:(E)SI 输出到端口DX F3 AC REP LODS AL 将 (E)CX 个字节从DS:(E)SI 加载到AL F3 AD REP LODS AX 将 (E)CX 个字从DS:(E)SI 加载到AX F3 AD REP LODS EAX 将 (E)CX 个双字从DS:(E)SI 加载到EAX F3 AA REP STOS m8使用 AL 填写位于ES:(E)DI 的 (E)CX 个字节F3 AB REP STOS m16使用 AX 填写位于ES:(E)DI 的 (E)CX 个字F3 AB REP STOS m32使用EAX 填写位于ES:(E)DI 的 (E)CX 个双字F3 A6 REPE CMPS m8,m8在ES:(E)DI 与DS:(E)SI 中查找不匹配的字节F3 A7 REPE CMPS m16,m16在 ES:(E)DI 与 DS:(E)SI 中查找不匹配的字F3 A7 REPE CMPS m32,m32在ES:(E)DI 与DS:(E)SI 中查找不匹配的双字名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - F3 AE REPE SCAS m8从 ES:(E)DI 开始查找非AL 字节F3 AF REPE SCAS m16从 ES:(E)DI 开始查找非AX 字F3 AF REPE SCAS m32从 ES:(E)DI 开始查找非EAX 双字F2 A6 REPNE CMPS m8,m8在 ES:(E)DI 与 DS:(E)SI 中查找匹配字节F2 A7 REPNE CMPS m16,m16在 ES:(E)DI 与 DS:(E)SI 中查找匹配字F2 A7 REPNE CMPS m32,m32在 ES:(E)DI 与 DS:(E)SI 中查找匹配双字F2 AE REPNE SCAS m8从 ES:(E)DI 开始查找AL F2 AF REPNE SCAS m16从 ES:(E)DI 开始查找AX F2 AF REPNE SCAS m32从 ES:(E)DI 开始查找EAX 说明按计数寄存器(E)CX) 中指定的次数重复执行字符串指令,或是重复到ZF 标志不再满足指定的条件。 REP(重复)、REPE(相等时重复) 、REPNE(不相等时重复) 、REPZ(为零时重复)及 REPNZ (不为零时重复) 助记符都是可以添加到一些字符串指令中的前缀。REP 前缀可以添加到INS、 OUTS、MOVS、 LODS 及 STOS 指令,REPE、REPNE、REPZ 及 REPNZ 前缀可以添加到CMPS 与 SCAS 指令。(REPZ 与 REPNZ 前缀分别是REPE 与 REPNE 前缀的同义形式) 。同非字符串指令一起使用时,REP 前缀的行为未定义。REP 前缀一次只能应用于一条字符串指令。要重复指令块,请使用LOOP 指令或其它循环结构。所有这些重复前缀都会使关联的指令重复执行,直到寄存器(E)CX 中的计数递减到0(请参阅下表)。 (如果当前地址大小属性为32,则将寄存器ECX 用作计数器;如果大小属性为 16,则将CX 寄存器用作计数器) 。在每次迭代之后,REPE、REPNE、REPZ 及 REPNZ 前缀还会检查ZF 标志的状态,如果ZF 标志未处于指定的状态,则终止重复循环。同时测试两个终止条件时,终止重复的原因可以通过使用JECXZ 指令来测试(E)CX 寄存器进行确定,也可以通过使用JZ、JNZ 及 JNE 指令来测试ZF 标志进行确定。重复前缀终止条件1终 止 条件 2REP ECX=0 无名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - REPE/REPZ ECX=0 ZF=0 REPNE/REPNZ ECX=0 ZF=1 使用REPE/REPZ 与 REPNE/REPNZ 前缀时,由于CMPS 与 SCAS 指令都会根据它们的比较结果设置ZF 标志,因此ZF 标志不需要初始化。正在重复的字符串操作可以因异常或中断而暂停。发生这种情况时,将保存寄存器的状态,以便从异常或中断处理程序返回时,字符串操作能够恢复。源寄存器与目标寄存器指向下一个要操作的字符串元素,EIP 寄存器指向字符串指令,ECX 寄存器保存的是上一次成功迭代指令之后的值。通过此种机制, 就可以执行很长的字符串操作,而不会影响系统的中断响应时间。在执行以REPE 或 REPNE 为前缀的CMPS 或 SCAS 指令期间,如果发生错误,EFLAGS 值还原为指令执行之前的状态。由于SCAS 与 CMPS 指令不会将EFLAGS 用作输入,因此,处理器可以在页错误处理程序完成之后恢复执行指令。谨慎使用REP INS 与 REP OUTS 指令。并非所有的I/O 端口都可以处理这些指令的执行速率。初始化大块内存最快的方法是使用REP STOS 指令。操作IF AddressSize 16 THEN use CX for CountReg; ELSE (* AddressSize 32 *) use ECX for CountReg; FI; WHILE CountReg 0 DO service pending interrupts (if any); execute associated string instruction; CountReg CountReg - 1; IF CountReg 0 THEN exit WHILE loop FI; IF (repeat prefix is REPZ or REPE) AND (ZF=0) OR (repeat prefix is REPNZ or REPNE) AND (ZF=1) THEN exit WHILE loop 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - FI; OD; 影响的标志无;不过CMPS 与 SCAS 指令会设置EFLAGS 寄存器中的状态标志。异常(所有操作模式)无;不过重复前缀关联的指令可能会生成异常。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -