资源描述:
《汇编语言IBP-PC第3章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.3.4串处理指令:设置方向标志指令CLD、STD串处理指令串重复前缀MOVSB/MOVSWREPSTOSB/STOSWREPE/REPZLODSB/LODSWREPNE/REPNZCMPSB/CMPSWSCASB/SCASW1.与REP配合工作的MOVS/STOS/LODS(1).REP执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS/LODS(4)重复(1)~(3)(2).MOVS串传送指令:MOVSDST,SRCMOVSB(字节)M
2、OVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]执行操作:(1)((DI))←((SI))(2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2方向标志DF=0时用+,DF=1时用-。REPMOVS:将数据段中的整串数据传送到附加段中。源串(数据段)→目的串(附加段)执行REPMOVS之前,应先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串长度→CX(4)建立方向标志(CLD使DF=0,STD
3、使DF=1)(SI)(DI)DF=0DF=1数据段附加段(SI)(DI)datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegmentmovax,datamovds,axmovax,extramoves,axleasi,mess1leadi,mess2movcx,17cldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17st
4、drepmovsbdatasegmentmess1db‘personal_computer’mess2db17dup(?)dataendscodesegmentmovax,datamovds,axmoves,axleasi,mess1leadi,mess2movcx,17cldrepmovsb…codeends(3).STOS存入串指令:STOSDSTSTOSB(字节)STOSW(字)执行操作:字节操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2例:把
5、附加段中的10个字节缓冲区置为20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstosw(4).LODS从串取指令:LODSSRCLODSB(字节)LODSW(字)执行操作:字节操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不与REP联用*源串一般在数据段中(允许使用段跨越前缀来修改),目的串必须在附加段中*不影响条件标志
6、位2.与REPE/REPZ(REPNE/REPNZ)配合工作的CMPS和SCAS(1).REPE/REPZREPNE/REPNZ执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出串操作,否则转(2)(2)(CX)←(CX)-1(3)执行CMPS/SCAS(4)重复(1)~(3)(2).CMPS串比较指令:CMPSSRC,DSTCMPSB(字节)CMPSW(字)执行操作:(1)((SI))-((DI))根据比较结果置条件标志位:相等ZF=1不等ZF=0(2)字节操作:(SI)←(SI)±1,(DI)←(
7、DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2(3).SCAS串扫描指令:SCASDSTSCASB(字节)SCASW(字)执行操作:字节操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:从一个字符串中查找一个指定的字符messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cldrepnescasbCOMPUTER(di)(di):相匹配字符的下一个地址(cx):剩下还未比较的字符个数(di)(CX)
8、=2例:比较两个字符串,找出它们不相匹配的位置例:反向传送leasi,mess1leadi,mess2movcx,8cldrepecmpsbleasi,mess1+7leadi,mess2+7movcx,8STdrepmovsb第3章:3.3.5控制转移指令无条件转移指令JMP条件转移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/J