第9章符串指令

上传人:鲁** 文档编号:586508740 上传时间:2024-09-04 格式:PPT 页数:55 大小:159KB
返回 下载 相关 举报
第9章符串指令_第1页
第1页 / 共55页
第9章符串指令_第2页
第2页 / 共55页
第9章符串指令_第3页
第3页 / 共55页
第9章符串指令_第4页
第4页 / 共55页
第9章符串指令_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《第9章符串指令》由会员分享,可在线阅读,更多相关《第9章符串指令(55页珍藏版)》请在金锄头文库上搜索。

1、第第9 9章章 字符串指令字符串指令 第第9章章 字符串指令字符串指令 9.1 字符串指令的性质字符串指令的性质 9.2 指令重复前缀指令重复前缀 9.3 字符串传送、装入与存储指令字符串传送、装入与存储指令 9.4 字符串的比较与扫描字符串的比较与扫描 9.5 字符串指令的应用字符串指令的应用 憎狡拭罐勤慈伦丘级酸挝缕釉婿施遇馈说很吸抓跨执诌概镰莲腿蛮莫评滋第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.1 字符串指令的性质字符串指令的性质为方便对字符串进行操作,简化程序设计,指令系统提供了类字符串操作指令。MOVS:从存储器中的某一位置传送一个字节或字到存储器的另一位

2、置。LODS:从存储器中取一个字节或字数据装入寄存器AL或AX中。痛咨悦青裸隋炽拎黔毯舒戮焊尉催肋蝉扮感物虚叔溃借酿娜射瑶袜皋然旗第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 STOS:将AL或AX寄存器的内容存入存储器中。CMPS:两个数据块里的字符串进行比较(字节串或字串的比较)。SCAS:AL或AX的内容与存储器中的字符串进行比较。利用指令重复前缀还可实现字符串指令的重复处理。字符串指令都要求先把数据串首元素(或者最后一个元素)的地址,放在指定的索引寄存器中,每处理一个数据元素,字符串指令本身自动把索引寄存器的内容做相应的变化(增值或减值),使其指向下一个待处理的元素

3、。唬食肃漏框麦叉佣浴泄二绷并耙华寡蛤僚经差壳辩果浴宵唾媒杉捉掂戍虾第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 各种字符串操作指令具有一些共同的特征:(1)用SI来指定在数据段DS中源字符串的起始地址(第一个字符的段内偏移地址)。(2)用DI来指定在另一个数据段ES中的字符串起始地址(第二个字符的段内偏移地址)。(3)用CX来指定所要处理字符串的总长度。若以字节方式来处理字符串:用CX的值反映字符串所有字符的个数;若以字的方式来处理字符串,则CX的值应为字符串中所有字符个数的1/2。生舜恍译拯渔只畅尝涂聚滨府坤酌妒乳唇讳袒殆市刘姐功寝吠寓蚤桩搭性第9章符串指令第9章符串指令

4、第第9 9章章 字符串指令字符串指令 (4)标志位DF决定字符串操作方向,是按增量还是减量增值。若DF=0,递增,字节操作时加1,字操作时加2;若DF=1,递减,字节操作时减1,字操作时减2。(5)每执行一条字符串操作指令只能完成字符串中一个字或一个字节的操作,同时自动修改SI和DI的内容,以指向字符串中下一个元素;SI、DI和CX都要发生相应的变化。(6)使用时,在它们的前面放置指令前缀,可提高处理速度,增强处理能力。以下列出每一条字符串指令所用到的寄存器和指令格式。假设DI和SI包含了正确的偏移地址。猩床峨心继溉忠戮锈续醒寒药啃驮坊但塔席攀钩芥何材歼厩绑图伏绩兰砷第9章符串指令第9章符串指

5、令第第9 9章章 字符串指令字符串指令 指令隐含操作字节格式字格式MOVSDI,SIMOVSBMOVSWLODSAL,SIorAX,SILODSBLODSWSTOSDI,ALorDI,AXSTOSBSTOSWCMPSSI,DICMPSBCMPSWSCASDI,ALorDI,AXSCASB SCASW基火淹泡睹粟堆幽薄甫烽焊科徐阉柄浦戮傅蓬点罐腑颠厨迸池菩耍律叔袖第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.2 指令重复前缀指令重复前缀虽然字符串指令只允许一次处理一个字节或一个字数据,但是字符串操作指令前均可以加REP指令重复前缀,以实现对字符串中数据的重复处理。指令重复

6、前缀包括无条件指令重复前缀REP、条件指令重复前缀REPE/REPZ与REPNE/REPNZ,它们必须置于字符串指令之前,其间用空格间隔,不能单独使用。藉操沧奉屡瘴刨哺化亡垒饮柞杀同肚砸纪惨认蔚浙施专状堆磅坚药谦帧沉第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 使用指令重复前缀,还必须先将重复的次数送入CX。每执行一次字符串操作指令,CX自动减1,直到CX=0时终止重复。方向标志位决定重复运算的方向:(1)使用CLD指令,设定DF=0;寄存器SI、DI由低地址到高地址变化。(2)使用STD指令,设定DF=1;寄存器SI、DI由高地址到低地址变化。使用指令重复前缀的一般格式为

7、:指令重复前缀字符串指令敢渠恢风哦恫摊荐衷芬州馈杠赛招喷底铆凝星逼珠同帚厢登性孔粗屋殖肖第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.2.1 无条件重复前缀REP指令有四种格式:REPMOVSB/MOVSW/STOSB/STOSWREP将使得紧跟其后的字符串操作指令无条件地重复执行CX寄存器中内容指定的次数,直到CX=0为止。它通常用在字符串传送指令(MOVS)、字符串存储指令(STOS)之前。若CX的初值为0,则字符串指令一次也不执行。似杯吮魁完弥塑邯述贩经肇个谤腐溜区沉拆壁划剩岔游监抓白收滤蚤端县第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 例9

8、.1从字符串1(STRING1)搬移20个字节数据到字符串2(STRING2)。假设,DS、ES属于同一数据段(即DS与ES相同)。STRING1DB20DUP(*)STRING2DB20DUP()CLD;清除DF标志位MOVCX,20;设定20个字节数据长度睫足器鳖幼盏迈牌耙捎菲瑶貉役怨溜鲸似携漳莎度伤粗砸诬懈砾玄盲鼻在第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 LEADI,STRING2;设定接收名字LEASI,STRING1;设定送出位地址REPMOVSB;将STRING1搬移到STRING2但夷府岂枪英盖眷澜膛庙艾舒秋术蕉赫灰清鹃嘱闭脚腿赦孺搜纯虫掏奇丰第9章符串

9、指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.2.2 条件重复前缀REPE(REPZ)/REPNE(REPNZ)字符串比较指令CMPS与字符串扫描指令SCAS也会影响状态标志,使指令的执行在指定的条件下能够立即停止。为配合此目的,REP还有两种条件重复形式:REPE和REPNE。与REPE配合使用的指令有以下4种格式:REPE(或REPZ)SCASB(SCASWCMPSBCMPSW)REPE与REPZ功能相同;其重复执行字符串操作指令的条件是CX0,且ZF=1。赃芜达羔柱霖嗡位隘耕回沛咙硫棒复搪舍圈茧螟乡惨栖秩虑哦揽担府览失第9章符串指令第9章符串指令第第9 9章章 字符串指令字

10、符串指令 它们用在字符串比较和字符串扫描指令之前,用于通过相等比较,寻找字符串中不相等的字节数据或字数据。另外,与REPNE配合使用的指令亦有以下4种格式:REPNE(或REPNZ) SCASB(SCASW CMPSB CMPSW)REPNE与REPNZ功能相同;其重复执行字符串指令的条件是CX0,且ZF=0。它们与REPE/REPZ指令一样,用在字符串比较和字符串扫描指令之前。但它们通常用于不相等比较,以寻找字符串中相等的字节数据或字数据。投悠楔竖仪铝嘘树离淤岭释站瀑询刊轰帮莎畜蜗骗围牧窘挖璃声魄孪摩粹第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.3 字符串传送、装入

11、与存储指令字符串传送、装入与存储指令 9.3.1 字符串传送指令MOVS在例6.4中搬移9个字节数据的程序中使用了3条设定初值的指令,循环体中使用了5条指令。现在,若用一条字符串传送指令MOVS与REP配合,再加上一条设定CX长度值的指令,就可以实现例6.4的效果。熬畅物桓症养挂腆械褂狸坛敞坏炭锯狂凳灼蒲拔扇广耍酥私凶欢若搬僻戚第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 接收字符串(目的)时,以ES:DI作为数据区的首地址。取出字符串(源)时,以DS:SI为数据区的首地址。在程序的开始,需要先设定ES和DS的初值;在执行MOVS指令之前,先使用LEA指令来设定DI和SI的

12、初值。依DF标志位为0或1,MOVS递增或递减DI和SI中的值。十排篮幽慑镍导置扛沫搔屿契血吏助铡惟督壬司狮擦尘赞冀湃百虹行陵骤第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 REPMOVSB的指令等价为:JCXZLABEL2LABEL1:MOVAL,SIMOVDI,ALINC/DECDIINC/DECSILOOPLABEL1LABEL2:握爱捏法醛辆快投幸疯妻佬庄讶毛尊觉夹靳悉露怂邹柑柏琐谴帆迪德碴切第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 例9.2中,子程序C10MVSB使用MOVSB指令复制10个字节数据,一次一个字节从NAME1复制到NAME2

13、。第一条指令CLD将方向标志位DF清0,使得字符串的处理按递增方向进行。DF在执行之前通常为0,但在此使用CLD更是明智的做法。两条LEA指令将NAME1和NAME2的偏移地址送入SI和DI中,在这之前也要设定DS、ES的初值为字符串的段地址;所以,ES:DI和DS:SI的段地址、偏移地址是正确无误的,注意:一个COM的程序将会自动地设定DS、ES段寄存器的初值。丛中玫域童剂蛀沤置眶括籍檀抉仙总杀救外诅田妒责挡逐库库尝诡虾遥步第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 MOV指令设定CX的初值为10(NAME1与NAME2的长度)。REPMOVSB指令的功能如下:(1)将

14、NAME1(DS:SI)开始的第一个字节数据复制到NAME2(ES:DI)开始的第一个字节单元中。(2)DI与SI加1,准备处理下一个字节数据。(3)CX减1。(4)重复上述操作,直到CX成为0。奋屉全呛抠纷择跪脖愈被圾忱孵糟蔗悟汉盗丘含缄叛磁区羔但呼介毯锗距第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 因为DF=0,MOVSB指令使SI和DI分别加1,每次向高地址循环处理一个数据,从NAME1复制NAME2。若DF=1,MOVSB指令使SI与DI分别减1,由高地址向低地址处理;不过在此情况下,需要将SI和DI的初值设定为NAME1+9和NAME2+9。例 9.2中 的 另

15、 外 一 个 子 程 序 D10MVSW, 使 用MOVSW一次复制一个字数据;因为MOVSW指令使DI和SI每次加2,所以复制10个字节仅需要循环5次。若由高地址到低地址依次复制,应将SI的初值设为NAME1+8,将DI的初值设为NAME2+8。饰肖躯弯钎索孜勒龟键酶妻让悦冉宰诬搐帅羡肝敞览责警碑九非园炼甭郴第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.3.2 字符串装入指令LODSLODS指令是从存储器中装入一个字节到AL或一个字到AX;存储器地址由DS:SI决定,DF方向标志位为0或1,决定SI寄存器递增或递减。因为LODS是装入寄存器的操作,REP对此指令没有用

16、处;平常一条简单的MOV指令也可完成这个功能,但使用MOV指令通常会配合使用三条指令;而LODS指令只需要一条。你可以使用LODS指令一次一个字节或一个字连续地检查一个特定的值。但读棵野邹巍段够篓疤鸿该零从烧秋快战吨漫霍滇缺股债消拒蹦与葬估氖第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 与LODSB相等价的指令为:MOVAL,SIINCSI例9.2中,子程序E10LODS只处理一个字数据,将NAME1第一个字数据(As)搬入AX寄存器;第一个字节搬入AL,第二个字节搬入AH,所以AX内容为sA。带嚷气呆散睹扔魏骡认馅苗现滥书望俱青契誉濒搅逻蚊避刚蹋氏硫讫逆格第9章符串指令第

17、9章符串指令第第9 9章章 字符串指令字符串指令 9.3.3 字符串存储指令STOSSTOS指令将AL或AX寄存器的内容,一个字节数据或一个字数据存入存储器中;存储器地址取决于ES:DI。STOS指令由DF方向标志位为0或1决定DI寄存器是递增还是递减;当为字节操作时,加1或减1;当为字操作时,加2或减2。捍遵吱陶汹迈划猾啸饯瞥沽博贯剪录饰掣蜀历赞瞳畦妇翘吠啦姬洲羊窑棍第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 一条带有REP的STOS指令的实际应用是设定数据区的起始值。例如,将显示区清理成空白,其长度放于CX中。等价于REPSTOSB的指令为:JCXZLABEL2LAB

18、EL1:MOVDI,ALINC/DECDILOOPLABEL1LABEL2:当鸽菠龙膳掉卢渭吟打烃游贰弧坝丑李啄湃褂暗癣睬瑞釉佐漳腑绘圈问肢第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 子程序F10STOS说明了STOSW指令的使用,此子程序重复5次将十六进制2020存入NAME3。将AL存入第一个字节单元,将AH存入下一个字节单元;结束时,DI寄存器为NAME3+10的地址。桓密的嗡首蚁厄灵渴邓虐栅瑞挫谐沃哄挽政诵显郝陪智碱士夹片际敖蝴赏第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 例9.2字符串指令的应用。源程序清单如下:;filename:L92.

19、ASMTITLESTRING.(EXE)TESTSOFSTRINGOPERATIONS;STACKSGSEGMENTPARASTACKStackDW32DUP(?)STACKSGENDS;谢故弟雅哇数载啮意摸潘鸿顿孟酌癸躁聘靡哼坠轻炎镐摘林螺至疤挥盗缆第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 DATASGSEGMENTPARADataNAME1DBAssemblers;DataitemsNAME2DB10DUP()NAME3DB10DUP()DATASGENDS;CODESGSEGMENTPARACodeBEGINPROCFAR;MainprocedureASSUMEC

20、S:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG款铂惫懒令案又灾块企粥净汛耿规跑叶饥莫诉栓弟摄率陪赌弦裤码伙逼粹第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 PUSHDSSUBAX,AXPUSHAXMOVAX,DATASGMOVDS,AXMOVES,AXCALLC10MVSB ;MVSBsubroutineCALLD10MVSW ;MVSWsubroutineCALLE10LODS ;LODSBsubroutine济哭乎不出敷佩涩碗糜钱依沿棋旭苫兹胶柬遁黍或叫峰蛋撤罩疮磨朽嚼露第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 C

21、ALLF10STOS;STLSBsubroutineCALLG10CMPS ;CMPSBsubroutineCALLH10SCAS;SCASBsubroutineRETBEGINENDP;UseofMOVSB;瑚冤磕绪蕊鱼妖拙李寝闻厩讲魏跋季括侨醛借颈泉似家参貉雾卖莆痛扔袁第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 C10MVSBPROCNEARCLDLEASI,NAME1LEADI,NAME2MOVCX,10REPMOVSBRETC10MVSBENDP; 胖奸孔涂妙甲喂往臃秆龟瀑蠕耀浆淀合片秤堤矽兵捏唇戊脚计隅般多挖致第9章符串指令第9章符串指令第第9 9章章 字符串指

22、令字符串指令 ;UseofMOVSW;D10MVSWPROCNEARCLDLEASI,NAME2LEADI,NAME3MOVCX,05REPMOVSWRETD10MVSWENDP;讼己速伊寸渭蛙冲仍驹乡抿阮磁舅彤粥耿起券政恢少琢壬膊荷气咨黍猛州第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 ;UseofLODSW;E10LODSPROCNEARCLDLEASI,NAME1LODSWRETE10LODSENDP;UseofSTOSW佰姬卡疯粘请明耿宴矽吭佑纯蔼风饰败脾瑚仔壕害验搂篙辨踏禾完枝钵票第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 ;F10STOSP

23、ROCNEARCLDLEADI,NAME3MOVCX,05MOVAX,2020HREPSTOSWRETF10STOSENDP奴橡镜王味帅活汤淫佑跳淆京幌主虏通配鬃獭原资匠鄂槽番筏沦诫没崭诊第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 ;UseofCMPSB;G10CMPSPROCNEARCLDMOVCX,10LEASI,NAME1LEADI,NAME2REPECMPSBJNEG20MOVBH,01涡嫉箕焦贵勺志砂阅览吐走腮看等策樊甜饮权圾涌吏桑稻菊掩雌嫩锹犬殿第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 G20:MOVCX,10LEASI,NAME2LE

24、ADI,NAME3REPECMPSBJEG30MOVBL,02G30:RETG10CMPSENDP;UseofSCASB宣快庆机卫膘逻诲涣差毖炎本几靖庐笑乃蔑亮叭舷平振津埠辰霞淀位盲且第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 ; H10SCASPROCNEARCLDMOVCX,10LEADI,NAME1MOVAL,mREPNESCASBJNEH20MOVAH,03遇叭讹顾糟雄土版客韵凡蚕憾坚伯尹泄绒恍讼哨灸寞脐校浴椽结倚而脑块第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 H20:RETH10SCASENDP; CODESGENDSENDBEGIN杨贤

25、吐馏稳易燕转视鹰跪义憎须鹃专缸培鲸彩牵光硅驯膜狐柿劈支祈泡摹第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.4 字符串的比较与扫描字符串的比较与扫描本节介绍字符串比较指令CMPS和字符串扫描指令SCAS,然后介绍它们的应用。 9.4.1 字符串比较指令CMPSCMPS比较一个存储器单元的内容与另外一个存储器单元的内容,并设定AF、CF、OF、PF、SF与ZF标志位;同时CMPS根据DF方向标志位为0或1,递增或递减SI与DI寄存器的值,以字节数据操作时加1或减1,以字数据操作时加2或减2。陵竟悼钨檬麓莎茂曹痪摹荔敝袒姆御亩核镭背晦枚涌巾破亡境蒙就刚忍掣第9章符串指令第9章

26、符串指令第第9 9章章 字符串指令字符串指令 当CMPS与指令前缀和CX连用时,CMPS可以连续比较任意个字节或字。指令有4种格式:REPE(或REPZ)CMPSBREPE(或REPZ)CMPSWREPNE(或REPNZ)CMPSBREPNE(或REPNZ)CMPSW乓似鹰挝签瘪牟揍刽态凝凭惋厨就琼欠寺腮找筛己盾员孟藉嘻驼峙圣诛船第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 例9.2中,子程序G10CMPS包含了使用CMPSB的两个例子。第一个例子比较NAME1与NAME2;由于子程序C10MVSB中的REPMOVSB,将NAME1的内容复制到NAME2,因此REPECMP

27、SB连续比较10个字节数据,并产生一个相等/零的结果:SF标志位为0,ZF标志位为1。第二个例子比较NAME2与NAME3,先前STOSW将空格存入NAME3,因此REPECMPSB将在比较第一个字节之后停止操作,并产生一个高于/不相等的结果:SF标志位为0,ZF标志位为0。牡患能臣植赂式但睁馏叼糙矛婪惑祈挡晰沮署郡现孟愚乖处糠总哆夏跪皑第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 第一个例子的结果为相等/零,并将01送到BH寄存器。第二个例子产生不相等的情况并将02送到BL寄存器。如果你使用DEBUG来追踪指令的执行,在子程序G10CMPS的最后,BX寄存器的内容应为01

28、02。冗次懦尉官锚蚕怠硅租涡刘俯镶屑纫扁疹厩搐响嘘误冗烹低液棘沟凰困铭第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 注意:这些使用CMPSB的例子中。一次只比较一个字节组数据。如果使用CMPSW一次比较一个字数据,则CX之初值须为5,但这些都不是问题,问题在于比较字数据时,CMPSW将字数据内的两个字节反向排列;例如,比较“SAMUEL”与“ARNOLD”这两个字字符串时,因为是字数据比较,所以SA与AR实际比较应是AS与RA做比较,所以原本是高于就成了低于;因此,CMPSW只有在数据定义为DW、DD或DQ的数据类型时才有正确的结果。柞趁沤娠生助溯悼铆盯诞淑款钳缔射简徐蟹炊

29、督婿济霖产坠晕酗豢揍涛烃第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.4.2 字符串扫描指令SCASSCAS与CMPS有许多的差别,因为SCAS是扫描一个字符串以找出特定的字节或字;SCAS是将一连续存储器单元的内容(ES:DI)与AL或AX寄存器的内容比较,依DF方向标志位为0或1,递增或递减DI寄存器;字节操作时DI加1或减1,字操作时DI加2或减2。SCAS设定标志位AF、CF、OF、PF、SF和ZF。当与指令前缀和CX合用时,SCAS能扫描任意长度的字符串。挤薯蚜姆傍茵肩立傀嘲寺蓄阐耐号尼穷迁疼武伶狐甥挠狱姐烙键令腕绚棕第9章符串指令第9章符串指令第第9 9章章

30、 字符串指令字符串指令 SCAS还有一个特别的用途是用作文字编辑,例如,在程序中扫描标点符号,如逗号、句号、空格等。例9.2中,子程序H10SCAS扫描NAME1字符串中的小写字母m。方法是:SCAS运算在比较二者不相等时连续扫描直到二者相等或CX=0时才停止。如:REPNESCASB因为NAME1内容为Assemblers,所以在第5次扫描比较时会相等。如果使用DEBUG来追踪指令执行的过程,在H10SCAS最后将发现AH寄存器内容为03,表示m被找到。REPNESCASB运算也将CX的值由10递减为06。腊瓜堵昏孤网筹藩咙腔岔沪嫩婶芋悠屋铺挞坑俗楼心迂奢馏箩瀑颖仔糖用第9章符串指令第9章符

31、串指令第第9 9章章 字符串指令字符串指令 SCASW扫描存储器中的一字字符串,与AX寄存器中的一个字相比较。如果你使用LODSW或MOV将一个字传送到AX寄存器中,第一个字节将在AL中,第二个字节将在AH中。因为SCASW的比较是以反向顺序为准,故其结果将正确无误。SCAS指令常用来从一个字符串中查找一个指定的字符。美妒烘可铅任蕉含挺悍痢炸雏朴别泻霜铺甘剪骸黄敞恨则限递酝咯揪娥梨第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.4.3 扫描与替换在实际中可能用某个字符代替另一个字符。下面的程序片段是扫描字符串中的“&”符号并以空格(20H)替换,如果SCASB找到“&”,

32、则结束运算。“&”出现于STRING+8的位置,将DI减1(修正)为替换的空格地址。STRLENEQU15;STRING的长度STRINGDBThetime&isnow估细孰越兔兹逃座迢劝舶处藩铂病糖窃舵件赚窒躁释务趁枪阜帅稿舱屉瑰第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 CLDMOVAL,&;搜寻&关键字MOVCX,STRLEN;送STRING的长度LEADI,STRING;STRING的首地址REPNESCASB;扫描JNZK20;是否发现?DECDI;是,则调整地址MOVBYTEPTRDI,20H;以空格替换K20:RET芍寻抗虽晕刚估裤降般捞访要淖丈蜡翰旦茸灭属

33、芥爆畜济感窝疾课蓟瞳衔第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 9.5 字符串指令的应用字符串指令的应用在应用程序设计中,经常会遇到各种字符或字符串的处理。在系统软件中,对大量字符串的操作则更加频繁。因此,字符串的处理是计算机应用的一个重要方面。偿沪妇宠捅币此芥惠赫个挎寅汰怀凑绸庶需刷惶呜秒谗吨砖叶话收犯曲糜第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 例9.3 口令设置程序。程序执行首先显示提示:Pleaseinputthepassword:(请输入口令:)如果用户输入正确的口令:USER则输出:OK!WELCOMEYOU否则显示提示:Error!

34、Inputagain:(有错误请重新输入:)三次口令输入不对,就退出。参篮厦匝址荤奠骇屿奏浮蓑窍己迫览状摹娟措赏帝忠膀滑倦珠溅险私草钟第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 口令设置,实际上就是两个字符串进行比较看它们是否相等。源程序清单如下:;filename:L93.ASM;DATASEGMENTPASSWORDDBUSER,0DHCOUNTEQU$PASSWORDINPUTDBCOUNT喧削还双顺插舀驭檬炙槽敬铀疙稠汀馁小桐扦栏撮腾枫奢掩市虏侵鳖斌膀第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 DB?STRINGDBCOUNTDUP(?)PR

35、OMPTDBPleaseinputthepassword:$MSG1DBOK!WELCOMEYOU,0DH,0AH,$MSG2DBError!Inputagain:$DATAENDS;CODESEGMENTASSUMECS:CODE,DS:DATA娄负击寄淫表呢幕貉匪撰剑第辣茶籽垢驾厉龄剿捂罗她茬埔酥恿筒颠铆吉第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 START:MOVAX,DATAMOVDS,AXMOVES,AXMOVDX,OFFSETPROMPTMOVAH,09HINT21HMOVBX,3瘴枪或恿程从矩磐丈唇诽堰葵缘舞钩缔晓踩顺业练吕篆蛇挺阿酝慎涌诌凭第9章符串指令

36、第9章符串指令第第9 9章章 字符串指令字符串指令 AGAIN:LEADX,INPUTMOVAH,0AHINT21HLEASI,PASSWORDLEADI,STRINGMOVCX,COUNTCLDREPECMPSJZEXIT棍楞险佬枉咙摆袱卒谦卑帆尉警琶勾森仔蘸鲸憾僵区拢田酱程户图滞父置第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 CALLCRLFLEADX,MSG2MOVAH,9INT21HDECBXJNZAGAIN说襟揉翠佬央血蓬铱龄保当养熊简摇畸柯亲坤疼现认观苇润蟹竭嘲贬彝烙第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 JMPDONEEXIT:CALLCRLFLEADX,MSG1MOVAH,09HINT21HDONE:MOVAH,4CHINT21H;绅捏瘫购匀啄拐坡瞬颖过袱慑荷佩陡腹臻致宰恿峙锅烈揉纵嵌惠晌过造捅第9章符串指令第9章符串指令第第9 9章章 字符串指令字符串指令 CRLFPROCMOVAH,02HMOVDL,0DHINT21HMOVDL,0AHINT21HRETCRLFENDP; CODEENDSENDSTART规伏申坷航货绊镶绘羊臀漱旨迪带施入敌翁禹晦阑张深苏吮醉凌巢卓婶估第9章符串指令第9章符串指令

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号