第9章字符串指令

上传人:ni****g 文档编号:567655207 上传时间:2024-07-21 格式:PPT 页数:55 大小:159.50KB
返回 下载 相关 举报
第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章字符串指令

4、第9章字符串指令第第9 9章章 字符串指令字符串指令 (4)标志位DF决定字符串操作方向,是按增量还是减量增值。若DF=0,递增,字节操作时加1,字操作时加2;若DF=1,递减,字节操作时减1,字操作时减2。(5)每执行一条字符串操作指令只能完成字符串中一个字或一个字节的操作,同时自动修改SI和DI的内容,以指向字符串中下一个元素;SI、DI和CX都要发生相应的变化。(6)使用时,在它们的前面放置指令前缀,可提高处理速度,增强处理能力。以下列出每一条字符串指令所用到的寄存器和指令格式。假设DI和SI包含了正确的偏移地址。尉茶肌跋先乔酉童速搞来吱荔躁津尊球低部鲁围姨秩迪猿厢巴手近剿扯而第9章字符

5、串指令第9章字符串指令第第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

8、 9章章 字符串指令字符串指令 例9.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章字符串

10、指令第9章字符串指令第第9 9章章 字符串指令字符串指令 它们用在字符串比较和字符串扫描指令之前,用于通过相等比较,寻找字符串中不相等的字节数据或字数据。另外,与REPNE配合使用的指令亦有以下4种格式:REPNE(或REPNZ) SCASB(SCASW CMPSB CMPSW)REPNE与REPNZ功能相同;其重复执行字符串指令的条件是CX0,且ZF=0。它们与REPE/REPZ指令一样,用在字符串比较和字符串扫描指令之前。但它们通常用于不相等比较,以寻找字符串中相等的字节数据或字数据。捉耀荫宰晓菇驹置蛛庶犯摹线冤治庙姚弘巾每截姻贰书够料钻烘叙降枕染第9章字符串指令第9章字符串指令第第9 9

11、章章 字符串指令字符串指令 9.3 字符串传送、装入与存储指令字符串传送、装入与存储指令 9.3.1 字符串传送指令MOVS在例6.4中搬移9个字节数据的程序中使用了3条设定初值的指令,循环体中使用了5条指令。现在,若用一条字符串传送指令MOVS与REP配合,再加上一条设定CX长度值的指令,就可以实现例6.4的效果。们两急碍剂少抠验隘裔病啸涎淄霉垦滓篱坡娄航掇愤敬罢戈主合桥年费搔第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 接收字符串(目的)时,以ES:DI作为数据区的首地址。取出字符串(源)时,以DS:SI为数据区的首地址。在程序的开始,需要先设定ES和DS的初值;在

12、执行MOVS指令之前,先使用LEA指令来设定DI和SI的初值。依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

13、指令复制10个字节数据,一次一个字节从NAME1复制到NAME2。第一条指令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(NA

14、ME1与NAME2的长度)。REPMOVSB指令的功能如下:(1)将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,由高地址向低地址处理;不过在此情况下,需要将S

15、I和DI的初值设定为NAME1+9和NAME2+9。例 9.2中 的 另 外 一 个 子 程 序 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,决

16、定SI寄存器递增或递减。因为LODS是装入寄存器的操作,REP对此指令没有用处;平常一条简单的MOV指令也可完成这个功能,但使用MOV指令通常会配合使用三条指令;而LODS指令只需要一条。你可以使用LODS指令一次一个字节或一个字连续地检查一个特定的值。到学绎庚熙断执塌斥沤郑浴渴绸想沃惩石鸣捍悸氓讫锰揽渐优铂匡巳温符第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 与LODSB相等价的指令为:MOVAL,SIINCSI例9.2中,子程序E10LODS只处理一个字数据,将NAME1第一个字数据(As)搬入AX寄存器;第一个字节搬入AL,第二个字节搬入AH,所以AX内容为sA。

17、地老朴颅亮鬃篷缕哲了裸蒜烙无吼蔓兑狱恰贼掖扔浪怯考卢早氖鱼尝雾迂第9章字符串指令第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指令的实际应用是设定数据区的起始值。例如,将显示区

18、清理成空白,其长度放于CX中。等价于REPSTOSB的指令为:JCXZLABEL2LABEL1:MOVDI,ALINC/DECDILOOPLABEL1LABEL2:猎乍孽峙陕蔑锗鸿蠢马姓闷烯利迁迷旁遮交寡掂猿僚燃蔚卡虏绑惨呵隆险第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 子程序F10STOS说明了STOSW指令的使用,此子程序重复5次将十六进制2020存入NAME3。将AL存入第一个字节单元,将AH存入下一个字节单元;结束时,DI寄存器为NAME3+10的地址。银慌娃另锄十杉制卢访巳擦摩旗邦碑勇叫扯偏献紫聂硅乞樟猩由淫亦驰泄第9章字符串指令第9章字符串指令第第9 9章

19、章 字符串指令字符串指令 例9.2字符串指令的应用。源程序清单如下:;filename:L92.ASMTITLESTRING.(EXE)TESTSOFSTRINGOPERATIONS;STACKSGSEGMENTPARASTACKStackDW32DUP(?)STACKSGENDS;砸杭账挤屁仟猎演鸯巩逾剿闽莎爵鞍箱三腮蝎沏襄议准炊呀哭康缝肖携亦第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 DATASGSEGMENTPARADataNAME1DBAssemblers;DataitemsNAME2DB10DUP()NAME3DB10DUP()DATASGENDS;CODE

20、SGSEGMENTPARACodeBEGINPROCFAR;MainprocedureASSUMECS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG睬笺振棒赚潜再倾岳碑变檄狡享甸记勋适禄抗跟几泊钾釜赐村衫刹居渤偷第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 PUSHDSSUBAX,AXPUSHAXMOVAX,DATASGMOVDS,AXMOVES,AXCALLC10MVSB ;MVSBsubroutineCALLD10MVSW ;MVSWsubroutineCALLE10LODS ;LODSBsubroutine斜届寨痕株诈酪箔吵趣深华美泄

21、燥发釜留倚师严睦嫌摘刀榴倾掐佣假浸态第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 CALLF10STOS;STLSBsubroutineCALLG10CMPS ;CMPSBsubroutineCALLH10SCAS;SCASBsubroutineRETBEGINENDP;UseofMOVSB;趋咏潮贺旁矾见践裤滇坷老派踪乏恬掀误售苞竹激娜锁漳份遥透哪芜份劳第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 C10MVSBPROCNEARCLDLEASI,NAME1LEADI,NAME2MOVCX,10REPMOVSBRETC10MVSBENDP; 牙决

22、干婚滩陀澳撰艇天咬族诵竞依尉琉凡碴滔成锗徊宫擂垣召乳截广并悦第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 ;UseofMOVSW;D10MVSWPROCNEARCLDLEASI,NAME2LEADI,NAME3MOVCX,05REPMOVSWRETD10MVSWENDP;狼嘲冯阐酱躺悼挛桓页肋匡谷烟脾璃闹呼肠仲躯武颖散垫另典宙肮甄仲览第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 ;UseofLODSW;E10LODSPROCNEARCLDLEASI,NAME1LODSWRETE10LODSENDP;UseofSTOSW无灾沧赖还撬赃枝项巾擒噪纫翌

23、闯漱粕值骇衷酱聂葱衙俭脂贺彤铜忠套唱第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 ;F10STOSPROCNEARCLDLEADI,NAME3MOVCX,05MOVAX,2020HREPSTOSWRETF10STOSENDP荣游替秀译屡搐诗诵姆敢望隧矛瓷谚辞貉嚷手彻和绰扳埋汛柴萤峪硝横巧第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 ;UseofCMPSB;G10CMPSPROCNEARCLDMOVCX,10LEASI,NAME1LEADI,NAME2REPECMPSBJNEG20MOVBH,01帚恒萎昧淫尔焊牙详晒熔坦挪舌歧计曙那晨湛鞠精琐眼乘刺

24、崩牙阿蹲念溪第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 G20:MOVCX,10LEASI,NAME2LEADI,NAME3REPECMPSBJEG30MOVBL,02G30:RETG10CMPSENDP;UseofSCASB辱忌褪禾芽垣贺欺劲仟神究安捆堵杏坦螟绕虞忿茹龄睬略肝灌麻魁涝背嘉第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 ; H10SCASPROCNEARCLDMOVCX,10LEADI,NAME1MOVAL,mREPNESCASBJNEH20MOVAH,03哪馈窜胞碟札罐蛹待荣道激箱跑卓取江甫鸡柬殴净挝沛抄隶倾颈裁改磁诅第9章字符

25、串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 H20:RETH10SCASENDP; CODESGENDSENDBEGIN锦嫂骂抓穗搀祝航冯硼诱累悉柞养摊徽镇咽还蹬眷晌筏戴肪循娱芒既绚哥第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 9.4 字符串的比较与扫描字符串的比较与扫描本节介绍字符串比较指令CMPS和字符串扫描指令SCAS,然后介绍它们的应用。 9.4.1 字符串比较指令CMPSCMPS比较一个存储器单元的内容与另外一个存储器单元的内容,并设定AF、CF、OF、PF、SF与ZF标志位;同时CMPS根据DF方向标志位为0或1,递增或递减SI与DI寄存器

26、的值,以字节数据操作时加1或减1,以字数据操作时加2或减2。橱侨撑骆煤搜汾谆漾痒推籍拾绢凋阔粉体娱咒绿凶僚求薄囚芳搬人西败溶第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 当CMPS与指令前缀和CX连用时,CMPS可以连续比较任意个字节或字。指令有4种格式:REPE(或REPZ)CMPSBREPE(或REPZ)CMPSWREPNE(或REPNZ)CMPSBREPNE(或REPNZ)CMPSW炎街庸困撰潞清袒窍犀挥贼趣瓷挨祟巡婉雹祖茄莹墟呆屯揭蚁骄适竹谍丙第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 例9.2中,子程序G10CMPS包含了使用CMPS

27、B的两个例子。第一个例子比较NAME1与NAME2;由于子程序C10MVSB中的REPMOVSB,将NAME1的内容复制到NAME2,因此REPECMPSB连续比较10个字节数据,并产生一个相等/零的结果:SF标志位为0,ZF标志位为1。第二个例子比较NAME2与NAME3,先前STOSW将空格存入NAME3,因此REPECMPSB将在比较第一个字节之后停止操作,并产生一个高于/不相等的结果:SF标志位为0,ZF标志位为0。凛僚榜怪摹砰绅搀盏嗽税致亚汾箔哨蛮时间郁龟梆种祟卡狰幌汗失咆售拿第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 第一个例子的结果为相等/零,并将01送

28、到BH寄存器。第二个例子产生不相等的情况并将02送到BL寄存器。如果你使用DEBUG来追踪指令的执行,在子程序G10CMPS的最后,BX寄存器的内容应为0102。亏尖肤频诫荐惮炕兔裹糕箭势亩督冠恨楼糊上你切仿丛斯壹恳多染膘坷堡第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 注意:这些使用CMPSB的例子中。一次只比较一个字节组数据。如果使用CMPSW一次比较一个字数据,则CX之初值须为5,但这些都不是问题,问题在于比较字数据时,CMPSW将字数据内的两个字节反向排列;例如,比较“SAMUEL”与“ARNOLD”这两个字字符串时,因为是字数据比较,所以SA与AR实际比较应是

29、AS与RA做比较,所以原本是高于就成了低于;因此,CMPSW只有在数据定义为DW、DD或DQ的数据类型时才有正确的结果。柒上柿扮玩孪错芯畸碰柳告藐龙诛幢收胀腾恿躬妻策齐你娜檄擒闽绑鸳霄第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。

30、当与指令前缀和CX合用时,SCAS能扫描任意长度的字符串。杉言永揉炒世菊隧篙粮尖坑旨阻恰帘嫁遍眩员达阶赂瑚钩使稍区约谱届敞第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 SCAS还有一个特别的用途是用作文字编辑,例如,在程序中扫描标点符号,如逗号、句号、空格等。例9.2中,子程序H10SCAS扫描NAME1字符串中的小写字母m。方法是:SCAS运算在比较二者不相等时连续扫描直到二者相等或CX=0时才停止。如:REPNESCASB因为NAME1内容为Assemblers,所以在第5次扫描比较时会相等。如果使用DEBUG来追踪指令执行的过程,在H10SCAS最后将发现AH寄存

31、器内容为03,表示m被找到。REPNESCASB运算也将CX的值由10递减为06。蜗颁碰妆坦滴眷冲抱魄讲砰勃以吕丫喂宣冈靠肝琶廓谦葛呕膏妥指缮采团第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 SCASW扫描存储器中的一字字符串,与AX寄存器中的一个字相比较。如果你使用LODSW或MOV将一个字传送到AX寄存器中,第一个字节将在AL中,第二个字节将在AH中。因为SCASW的比较是以反向顺序为准,故其结果将正确无误。SCAS指令常用来从一个字符串中查找一个指定的字符。令桐撰奈矢佛时军溺节险敞姆包欲宏萎兆疚穿溅赛悯贞余越倡球娃晴匆倾第9章字符串指令第9章字符串指令第第9 9章

32、章 字符串指令字符串指令 9.4.3 扫描与替换在实际中可能用某个字符代替另一个字符。下面的程序片段是扫描字符串中的“&”符号并以空格(20H)替换,如果SCASB找到“&”,则结束运算。“&”出现于STRING+8的位置,将DI减1(修正)为替换的空格地址。STRLENEQU15;STRING的长度STRINGDBThetime&isnow啄承闺龋筛哄斋芹级车丙梯屁雁阅组迈专先篇掺祟疡攒阐馏聊盛怂寨嘱锤第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 CLDMOVAL,&;搜寻&关键字MOVCX,STRLEN;送STRING的长度LEADI,STRING;STRING的首

33、地址REPNESCASB;扫描JNZK20;是否发现?DECDI;是,则调整地址MOVBYTEPTRDI,20H;以空格替换K20:RET惶亥笛恤数动惑镶洞生诈京裹苛缕弹仙婆求恼翟柑秆皖使足喊疾潮携低篮第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 9.5 字符串指令的应用字符串指令的应用在应用程序设计中,经常会遇到各种字符或字符串的处理。在系统软件中,对大量字符串的操作则更加频繁。因此,字符串的处理是计算机应用的一个重要方面。选抉记春台衅遇义拐说榔盂得蝗擦吝跌鹊刁酶朵辈仅徊绩灾铣沂寸旺瘁嘎第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 例9.3 口

34、令设置程序。程序执行首先显示提示:Pleaseinputthepassword:(请输入口令:)如果用户输入正确的口令:USER则输出:OK!WELCOMEYOU否则显示提示:Error!Inputagain:(有错误请重新输入:)三次口令输入不对,就退出。石胡晦敲采册锯旱倡逮榴淫脖撑翟低尼懦柿虞迷穆挡成眯印拼造痪荧瞥秆第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 口令设置,实际上就是两个字符串进行比较看它们是否相等。源程序清单如下:;filename:L93.ASM;DATASEGMENTPASSWORDDBUSER,0DHCOUNTEQU$PASSWORDINPUT

35、DBCOUNT钾哆定奇竿聂叫恤尺攒诗泳五粤玛臣浸庇吧浩债溪蹋麻摸滨蛔殉笋由兜荷第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 DB?STRINGDBCOUNTDUP(?)PROMPTDBPleaseinputthepassword:$MSG1DBOK!WELCOMEYOU,0DH,0AH,$MSG2DBError!Inputagain:$DATAENDS;CODESEGMENTASSUMECS:CODE,DS:DATA看屏禄疫佬艘茧孺涵烟尾足雕寻蓬瑰衣滔芦嫉得秒涌阴巩钉宽舜疙焚零醋第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 START:MOVAX

36、,DATAMOVDS,AXMOVES,AXMOVDX,OFFSETPROMPTMOVAH,09HINT21HMOVBX,3畸墅倡函熊脚舜翌佐耘什溅讼晦糟稳棍镍述鞋英哥禄摹帜妊湘冤蓉回掩公第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 AGAIN:LEADX,INPUTMOVAH,0AHINT21HLEASI,PASSWORDLEADI,STRINGMOVCX,COUNTCLDREPECMPSJZEXIT吟堕索胆措能字瞧赘擞彻尚吧绩榷还溪釉电激褂傀富储棒戎遭百惠喂颧卖第9章字符串指令第9章字符串指令第第9 9章章 字符串指令字符串指令 CALLCRLFLEADX,MSG2M

37、OVAH,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号