5种块操作指令的功能 (1) MOVSB/W/D将ESI所指向的字节/字/双字复制到EDI 所指向的字节/字/双字。 (2) CMPSB/W/D将ESI和EDI所指向的字节/字/双字进行 比较。 (3) SCASB/W/D将EDI所指向的字节/字/双字和 AL/AX/EAX进行比较 (4) STOSB/W/D将ALAX/EAX保存到EDI所指向的字节/字 /双字中 (5) LODSB/W/D将ESI所指向的字节/字/双字读入到 AL/AX/EAX中
5种块操作指令的功能 (1)MOVSB/W/D将ESI所指向的字节/字/双字复制到EDI 所指向的字节/字/双字。 (2)CMPSB/W/D将ESI和EDI所指向的字节/字/双字进行 比较。 ( 3 ) SCASB/W/D 将 EDI 所 指 向 的 字 节 / 字 / 双 字 和 AL/AX/EAX进行比较。 (4)STOSB/W/D将AL/AX/EAX保存到EDI所指向的字节/字 /双字中。 (5)LODSB/W/D将ESI所指向的字节/字/双字读入到 AL/AX/EAX中
3种重复前缀的用法 (1)前缀为REP时,重复次数固定为ECX。 REP和MOVS,STO0S,LODS联合使用 (2)前缀为REPZ时,重复次数最大为ECX。 ■REPZ和OMPS,SCAS联合使用。 ■如果在比较或扫描时,ZF=0,不再重复。 (3)前缀为 RENZ时,重复次数最大为ECX ■ RENZ和CMPS,SCAS联合使用 ■如果在比较或扫描时,ZF=1,不再重复
3种重复前缀的用法 (1)前缀为REP时,重复次数固定为ECX。 REP和MOVS,STOS,LODS联合使用。 (2)前缀为REPZ时,重复次数最大为ECX。 ◼ REPZ和CMPS,SCAS联合使用。 ◼ 如果在比较或扫描时,ZF=0,不再重复。 (3)前缀为REPNZ时,重复次数最大为ECX。 ◼ REPNZ和CMPS,SCAS联合使用。 ◼ 如果在比较或扫描时,ZF=1,不再重复
7.1.2块传送指令 MOVSB/W/D将操作数从一个内存单元传 送到另一个内存单元,它和REP前缀同时 使用,将一个内存块(源数据块)复制 到另一个内存块(目标数据块)
7.1.2 块传送指令 MOVSB/W/D将操作数从一个内存单元传 送到另一个内存单元,它和REP前缀同时 使用,将一个内存块(源数据块)复制 到另一个内存块(目标数据块)
1.数组的复制 下面的程序将数组 Array1复制给 Array2 Array l dWord1,10,100,1000,10000 Array2 DWORD 5 DUP(O) LEA ESI, Array LEA EDI, Array2 CLD MOV ECX. 5 REP MOVSD 每次, MOVSD传送一个双字,ESI,EDI自动加4, 指向下一个双字,ECX自动减1
1.数组的复制 下面的程序将数组Array1复制给Array2 Array1 DWORD 1, 10, 100, 1000, 10000 Array2 DWORD 5 DUP (0) LEA ESI, Array1 LEA EDI, Array2 CLD MOV ECX, 5 REP MOVSD 每次,MOVSD传送一个双字,ESI,EDI自动加4, 指向下一个双字,ECX自动减1
2.从字符串中删除一个字符 一行字符存储在缓冲区 In Buffer中 In Buffer byte Hellox World! 0 把X删掉的指令代码为 LEA ESI. NbUffer+6 ESⅠ指向字符 LEA EDI. NbUffer+5 ED指向字符’x CLD 地址由低至高 mov ecx. 8 传送8次 REP MOVSB 以字节为单位传送
2.从字符串中删除一个字符 一行字符存储在缓冲区InBuffer中 InBuffer BYTE 'Hellox World!', 0 把X删掉的指令代码为 LEA ESI, InBuffer+6 ; ESI指向字符' ' LEA EDI, InBuffer+5 ; EDI指向字符'x' CLD ; 地址由低至高 MOV ECX, 8 ; 传送8次 REP MOVSB ; 以字节为单位传送