3.向字符串中插入一个字符 InBuffer byte hello wrld! 想要将0插入进去的代码为: NbUffer BYTE Hello Wrld! 0 LEA ESI. NbUffer+ll ESⅠ指向字符00H LEA EDI. NbUffer+12 EDI指向?所在的位置 STD 地址由高至低 MOV ECX. 5 传送5次 REP MOVSB 以字节为单位传送 CLD 恢复为"地址由低至高 In Buffer+7,’o 插入字符o
3.向字符串中插入一个字符 InBuffer BYTE 'Hello Wrld!', 0 想要将O插入进去的代码为: InBuffer BYTE 'Hello Wrld!', 0, ? LEA ESI, InBuffer+11 ; ESI指向字符00H LEA EDI, InBuffer+12 ; EDI指向?所在的位置 STD ; 地址由高至低 MOV ECX, 5 ; 传送5次 REP MOVSB ; 以字节为单位传送 CLD ; 恢复为"地址由低至高" MOV InBuffer+7, 'o' ; 插入字符'o
4.块传送的3种情况 根据源数据块和目标数据块是否重叠,以及数据 块的地址前后顺序,将数据块的传送分为: (1)源数据块和目标数据块不重叠。DF=0或DF=1均可 (2)源数据块和目标数据块重叠,目标数据块地址较小。 能设置DF=0,ESI和EDI分别执行源数据块和目标数 据块的第1个单元的地址。 (3)源数据块和目标数据块重叠,目标数据块地址较大 只能设置DF=1,ESI和EDI指向源数据块和目标数据块 的最后一个传送单位
4.块传送的3种情况 根据源数据块和目标数据块是否重叠,以及数据 块的地址前后顺序,将数据块的传送分为: (1)源数据块和目标数据块不重叠。DF=0或DF=1均可。 (2)源数据块和目标数据块重叠,目标数据块地址较小。 只能设置DF=0,ESI和EDI分别执行源数据块和目标数 据块的第1个单元的地址。 (3)源数据块和目标数据块重叠,目标数据块地址较大。 只能设置DF=1,ESI和EDI指向源数据块和目标数据块 的最后一个传送单位
7.1.3块存储指令 块存储指令包括: STOSB, STOSW, STOSD ■将AL,AX或EAX的内容存入由ED指向的存储 单元,然后EDI自动增减1,2或4 可以和REP前缀一起使用,连续执行ECX次块 存储指令。 ■LODS指令一般不带REP前缀
7.1.3 块存储指令 块存储指令包括:STOSB,STOSW,STOSD ◼ 将AL,AX或EAX的内容存入由EDI指向的存储 单元,然后EDI自动增减1, 2或4。 ◼ 可以和REP前缀一起使用,连续执行ECX次块 存储指令。 ◼ LODS指令一般不带REP前缀
7.1.4块装入指令 块装入指令包括 LODSB, LODSW, LODSD 将由ESI指向的存储单元读入累加器AL,AX 或EAX中,然后ESI自动增减1,2或4 可以和REP前缀一起使用,连续执行ECX次读 入操作,但一般不带REP前缀
7.1.4 块装入指令 块装入指令包括LODSB, LODSW, LODSD ◼ 将由ESI指向的存储单元读入累加器AL, AX 或EAX中,然后ESI自动增减1, 2或4。 ◼ 可以和REP前缀一起使用,连续执行ECX次读 入操作, 但一般不带REP前缀
7.1.5块比较指令 块比较指令包括 CMPSB, CMPSW, CMPSD 较由EDI指向的目标操作数和由ESI指向的源 操作数,然后EDI和ESI自动增减1,2或4。 CMPS指令可以和REPZ或 RENZ前缀一起使用。 CMPS指令一般与REPZ前缀配合使用。 比较完成后,根据Z标志位来决定是否两个 数据块是否相等
7.1.5 块比较指令 块比较指令包括CMPSB, CMPSW, CMPSD ◼ 较由EDI指向的目标操作数和由ESI指向的源 操作数,然后EDI和ESI自动增减1, 2或4。 ◼ CMPS指令可以和REPZ或REPNZ前缀一起使用。 ◼ CMPS指令一般与REPZ前缀配合使用。 ◼ 比较完成后,根据ZF标志位来决定是否两个 数据块是否相等