《串操作类指令50024.pptx》由会员分享,可在线阅读,更多相关《串操作类指令50024.pptx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 2 章2.5 串操作类指令串串操操作作指指令令是是80868086指指令令系系统统中中比比较较独独特特的的一一类类指指令令,采采用用比比较较特特殊殊的的数数据据串串寻寻址址方方式式,在在操操作作主主存存连连续续区区域域的的数数据据时,特别好用、因而常用时,特别好用、因而常用重点掌握:重点掌握:MOVS STOS LODSCMPS SCAS REP一般了解:一般了解:REPZ/REPE REPNZ/REPNE第 2 章串数据类型串串操操作作指指令令的的操操作作数数是是主主存存中中连连续续存存放放的的数数据据串串(String)即即在在连连续续的的主主存存区区域域中中,字字节节或或字字的的序列
2、序列串串操操作作指指令令的的操操作作对对象象是是以以字字(W)为为单单位位的的字字串串,或或是是以以字字节节(B)为单位的字节串)为单位的字节串第 2 章串寻址方式源源操操作作数数用用寄寄存存器器SI寻寻址址,默默认认在在数数据据段段DS中,但允许段超越:中,但允许段超越:DS:SI目目的的操操作作数数用用寄寄存存器器DI寻寻址址,默默认认在在附附加加段段ES中,不允许段超越:中,不允许段超越:ES:DI每执行一次串操作指令,每执行一次串操作指令,SI和和DI将自动修改:将自动修改:n1(对于字节串)或(对于字节串)或2(对于字串)(对于字串)n执执行行指指令令CLD指指令令后后,DF=0,地
3、地址址指指针针增增1或或2n执执行行指指令令STD指指令令后后,DF=1,地地址址指指针针减减1或或2第 2 章串传送MOVS(move string)把把字字节节或或字字操操作作数数从从主主存存的的源源地地址址传送至目的地址传送至目的地址MOVSBMOVSB;字节串传送:;字节串传送:ES:DIDS:SIES:DIDS:SI;SISI1SISI1,DIDI1DIDI1演示演示演示演示MOVSWMOVSW;字串传送:;字串传送:ES:DIDS:SIES:DIDS:SI;SISI2SISI2,DIDI2DIDI2演示演示演示演示例例2.52:字节串传送:字节串传送mov si,offset so
4、urcemov si,offset sourcemov di,offset destinationmov di,offset destinationmov cx,mov cx,100100;cxcx传送次数传送次数cldcld;置;置DF=0DF=0,地址增加,地址增加again:again:movsbmovsb;传送一个字节传送一个字节dec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束offsetoff
5、set是汇编操作符,是汇编操作符,求出变量的偏移地址求出变量的偏移地址例例2.52:字串传送:字串传送mov si,offset sourcemov si,offset sourcemov di,offset destinationmov di,offset destinationmov cx,mov cx,5050;cxcx传送次数传送次数cldcld;置;置DF=0DF=0,地址增加,地址增加again:again:movsbmovsb;传送一个字传送一个字dec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again;判断传送次数;判断传送次数cxcx是否为是
6、否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束第 2 章串存储STOS(store string)把把AL或或AX数据传送至目的地址数据传送至目的地址STOSBSTOSB;字节串存储:;字节串存储:ES:DIALES:DIAL;DIDI1DIDI1STOSWSTOSW;字串存储:;字串存储:ES:DIAXES:DIAX;DIDI2DIDI2演示演示演示演示例例2.53:串存储:串存储mov ax,0mov ax,0mov di,0mov di,0mov cx,8000hmov cx,8000h;cxcx传送次数(传送次数(32102
7、4321024)cldcld;DF=0DF=0,地址增加,地址增加again:again:stoswstosw;传送一个字;传送一个字dec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again;传送次数;传送次数cxcx是否为是否为0 0 可将可将CLD改为改为STD吗?如何改用吗?如何改用STOSB?可不用给可不用给DI赋值吗?赋值吗?DI为偶数即可为偶数即可第 2 章串读取LODS(load string)把指定主存单元的数据传送给把指定主存单元的数据传送给AL或或AXLODSBLODSB;字节串读取:;字节串读取:ALDS:SIALDS:SI;SISI1S
8、ISI1LODSWLODSW;字串读取:;字串读取:AXDS:SIAXDS:SI;SISI2SISI2演示演示演示演示例例2.54:串读取:串读取1mov si,offset blockmov si,offset blockmov di,offset dplusmov di,offset dplusmov bx,offset dminusmov bx,offset dminusmov ax,dsmov ax,dsmov es,axmov es,ax;数据都在一个段中,所以设置;数据都在一个段中,所以设置es=dses=dsmov cx,countmov cx,count;cxcx字节数字节数c
9、ldcld例例2.54:串读取:串读取2go_on:go_on:lodsblodsb;从;从blockblock取出一个数据取出一个数据test al,80htest al,80h;检测符号位,判断是正是负;检测符号位,判断是正是负jnz minusjnz minus;符号位为;符号位为1 1,是负数,转向,是负数,转向minusminusstosbstosb;符号位为;符号位为0 0,是正数,存入,是正数,存入dplusdplusjmp againjmp again;程序转移到;程序转移到againagain处继续执行处继续执行jnz go_onjnz go_on;完成正负数据分离;完成正负
10、数据分离例例2.54:串读取:串读取3minus:minus:xchg bx,dixchg bx,distosbstosb;把负数存入;把负数存入dminusdminusxchg bx,dixchg bx,diagain:again:dec cxdec cx;字节数减;字节数减1 1jnz go_onjnz go_on;完成正负数据分离;完成正负数据分离第 2 章串比较CMPS(compare string)将将主主存存中中的的源源操操作作数数减减去去至至目目的的操操作作数数,以以便便设设置置标标志志,进进而而比比较较两两操操作作数之间的关系数之间的关系CMPSBCMPSB;字节串比较:;字节
11、串比较:DS:SIDS:SIES:DIES:DI;SISI1SISI1,DIDI1DIDI1CMPSWCMPSW;字串比较:;字串比较:DS:SIDS:SIES:DIES:DI;SISI2SISI2,DIDI2DIDI2例例2.55:比较字符串:比较字符串mov si,offset string1mov si,offset string1mov di,offset string2mov di,offset string2mov cx,countmov cx,countcldcldagain:again:cmpsbcmpsb;比较两个字符;比较两个字符jnz unmatjnz unmat;有不同
12、字符,转移;有不同字符,转移dec cxdec cxjnz againjnz again;进行下一个字符比较;进行下一个字符比较mov al,0mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp outputjmp output;转向;转向outputoutputunmat:unmat:mov al,0ffhmov al,0ffh;设置;设置ffhffhoutput:output:mov result,almov result,al;输出结果标记;输出结果标记第 2 章串扫描SCAS(scan string)将将AL/AX减减去去至至目目的的操操作作数数,以以便便设设置置标
13、标志志,进进而而比比较较AL/AX与与操操作作数数之之间的关系间的关系SCASBSCASB;字节串扫描:;字节串扫描:ALALES:DIES:DI;DIDI1DIDI1SCASWSCASW;字串扫描:;字串扫描:AXAXES:DIES:DI;DIDI2DIDI2例例2.56:查找字符串:查找字符串mov di,offset stringmov di,offset stringmov al,20hmov al,20hmov cx,countmov cx,countcldcldagain:again:scasbscasb;搜索;搜索jz foundjz found;为;为0 0(ZF=1ZF=1)
14、,发现空格),发现空格dec cxdec cx;不是空格;不是空格jnz againjnz again;搜索下一个字符;搜索下一个字符.;不含空格,则继续执行;不含空格,则继续执行found:found:.第 2 章重复前缀指令(repeat)串串操操作作指指令令执执行行一一次次,仅仅对对数数据据串串中中的的一一个个字字节节或或字字量量进进行行操操作作。但但是是串串操操作作指指令令前前,都都可可以以加加一一个个重重复复前前缀缀,实实现现串串操操作作的的重重复复执执行行。重重复复次次数数隐隐含在含在CX寄存器中寄存器中重复前缀分重复前缀分2类,类,3条指令:条指令:n配配合合不不影影响响标标志志
15、的的MOVS、STOS(和和LODS)指令的)指令的REP前缀前缀n配配合合影影响响标标志志的的CMPS和和SCAS指指令令的的REPZ和和REPNZ前缀前缀第 2 章REP重复前缀指令REP前前缀缀可可以以理理解解为为:当当数数据据串串没有结束没有结束(CX0),则继续传送,则继续传送例例2.52和和例例2.53中中,程程序序段段的的最最后后3条指令,可以分别替换为:条指令,可以分别替换为:REP MOVSB 和和 REP STOSWREPREP;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;直到;直到CXCX0 0,重复执行结束,重复执行结束第 2 章REPZ重复前缀指令REP
16、Z/REPE前前缀缀可可以以理理解解为为:当当数数据据串串没没有有结结束束(CX0),并并且且串相等串相等(ZF1),则继续比较,则继续比较REPZREPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断ZFZF是否为是否为0 0,;只要;只要CXCX0 0或或ZFZF0 0,重复执行结束,重复执行结束第 2 章REPNZ重复前缀指令REPNZ/REPNE前前缀缀可可以以理理解解为为:当当数数据据串串没没有有结结束束(CX0),并并且且串串不不相相等等(ZF0),则则继继续续比比较较REPZREPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并
17、判断ZFZF是否为是否为1 1,;只要;只要CXCX0 0或或ZFZF1 1,重复执行结束,重复执行结束例例2.57:比较字符串:比较字符串mov si,offset string1mov si,offset string1mov di,offset string2mov di,offset string2mov cx,countmov cx,countcldcldrepz cmpsbrepz cmpsb;重复比较两个字符;重复比较两个字符jnz unmatjnz unmat;字符串不等,转移;字符串不等,转移mov al,0mov al,0;字符串相等,设置;字符串相等,设置00h00hjm
18、p outputjmp output;转向;转向outputoutputunmat:unmat:mov al,0ffhmov al,0ffh;设置;设置ffhffhoutput:output:mov result,almov result,al;输出结果标记;输出结果标记解释解释解释解释例例2.58:查找字符串:查找字符串mov di,offset stringmov di,offset stringmov al,20hmov al,20hmov cx,countmov cx,countcldcldrepnz scasbrepnz scasb;搜索;搜索jz foundjz found;为;为
19、0 0(ZF=1ZF=1),发现空格),发现空格.;不含空格,则继续执行;不含空格,则继续执行found:found:.第 2 章2.6 处理机控制类指令对对CPU状态进行控制的指令状态进行控制的指令nNOP CS:SS:DS:ES:nLOCK HLT ESC WAIT第 2 章空操作指令NOP不不执执行行任任何何操操作作,但但占占用用一一个个字字节节存存储单元,空耗一个指令执行周期储单元,空耗一个指令执行周期NOP常用于程序调试常用于程序调试n在需要预留指令空间时用在需要预留指令空间时用NOP填充填充n代码空间多余时也可以用代码空间多余时也可以用NOP填充填充n还可以用还可以用NOP实现软件
20、延时实现软件延时事事实实上上,NOP和和XCHG AX,AX的的指指令令代码一样,都是代码一样,都是 90HNOPNOP第 2 章段超越前缀指令在在允允许许段段超超越越的的存存储储器器操操作作数数之之前前,使使用用段段超超越越前前缀缀指指令令,将将采采用用指指定定的段寄存器寻址操作数的段寄存器寻址操作数CS:;使用代码段的数据;使用代码段的数据SS:;使用堆栈段的数据;使用堆栈段的数据DS:;使用数据段的数据;使用数据段的数据ES:;使用附加段的数据;使用附加段的数据第 2 章封锁前缀指令LOCK;封锁总线;封锁总线这这是是一一个个指指令令前前缀缀,可可放放在在任任何何指指令前令前这这个个前前
21、缀缀使使得得在在这这个个指指令令执执行行时时间间内内,8086 处处理理器器的的封封锁锁输输出出引引脚脚有有效效,即即把把总总线线封封锁锁,使使别别的的控控制制器器不不能能控控制制总总线线;直直到到该该指指令令执执行行完后,总线封锁解除完后,总线封锁解除第 2 章暂停指令HLT;进入暂停状态;进入暂停状态暂暂停停指指令令使使CPU进进入入暂暂停停状状态态,这这时时CPU不不进进行行任任何何操操作作。当当CPU发发生生复复位位或或来来自自外外部部的的中中断断时时,CPU脱脱离离暂暂停状态停状态HLT指指令令可可用用于于程程序序中中等等待待中中断断。当当程程序序中中必必须须等等待待中中断断时时,可
22、可用用HLT,而而不不必必用用软软件件死死循循环环。然然后后,中中断断使使CPU脱脱离离暂暂停停状状态态,返返回回执执行行HLT的的下下一一条条指令指令第 2 章交权指令ESC 6位立即数位立即数,reg/mem;把浮点指令交给浮点处理器执行;把浮点指令交给浮点处理器执行浮浮点点协协处处理理器器8087指指令令是是与与8086的的整整数数指指令令组组合合在在一一起起的的,当当8086发发现现是是一一条条浮浮点点指指令令时时,就就利利用用ESC指令将浮点指令交给指令将浮点指令交给8087执行执行实实际际编编写写程程序序时时,一一般般采采用用易易于于理理解解的的浮浮点点指指令令助记符格式助记符格式
23、ESC 6,SI;实数除法指令:;实数除法指令:FDIV dword ptr SIESC 20H,AL;整数加法指令:;整数加法指令:FADD ST(0),ST第 2 章第 2 章等待指令WAIT;进入等待状态;进入等待状态8086利利用用WAIT指指令令和和测测试试引引脚脚实实现现与与8087同步运行同步运行浮浮点点指指令令经经由由8086处处理理发发往往8087,并并与与8086本本身身的的整整数数指指令令在在同同一一个个指指令令序序列列;而而8087执执行行浮浮点点指指令令较较慢慢,所所以以8086必须与必须与8087保持同步保持同步第 2 章第2章 总结本本章章详详细细而而完完整整地地
24、介介绍绍了了8086的的16位位指令系统的每条指令指令系统的每条指令希望大家进行一下整理(总结):希望大家进行一下整理(总结):n寻址方式寻址方式n指令支持的操作数形式指令支持的操作数形式n指令对标志的影响指令对标志的影响n常见编程问题常见编程问题通通过过复复习习整整理理,形形成成指指令令系系统统的的整整体体概念,进而掌握常用指令概念,进而掌握常用指令第2章 教学要求(4)1.熟悉熟悉串操作寻址特点串操作寻址特点2.掌握基本指令:掌握基本指令:MOVSLODSSTOS、REP3.熟悉特色指令:熟悉特色指令:CMPSSCAS、NOP4.了了 解解 不不 常常 使使 用用 的的 指指 令令:REP
25、Z REPNZ、LOCKHLTESCWAIT5.习题习题4(p70)2.15 2.16 2.26 课间休息第 2 章9、静夜四无邻,荒居旧业贫。5月-235月-23Sunday,May 21,202310、雨中黄叶树,灯下白头人。07:36:5907:36:5907:365/21/2023 7:36:59 AM11、以我独沈久,愧君相见频。5月-2307:36:5907:36May-2321-May-2312、故人江海别,几度隔山川。07:36:5907:36:5907:36Sunday,May 21,202313、乍见翻疑梦,相悲各问年。5月-235月-2307:36:5907:36:59M
26、ay 21,202314、他乡生白发,旧国见青山。21 五月 20237:36:59 上午07:36:595月-2315、比不了得就不比,得不到的就不要。五月 237:36 上午5月-2307:36May 21,202316、行动出成果,工作出财富。2023/5/21 7:36:5907:36:5921 May 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。7:36:59 上午7:36 上午07:36:595月-239、没有失败,只有暂时停止成功!。5月-235月-23Sunday,May 21,202310、很多事情努力了未必有结果,但是不努力却什么改变也没
27、有。07:36:5907:36:5907:365/21/2023 7:36:59 AM11、成功就是日复一日那一点点小小努力的积累。5月-2307:36:5907:36May-2321-May-2312、世间成事,不求其绝对圆满,留一份不足,可得无限完美。07:36:5907:37:0007:37Sunday,May 21,202313、不知香积寺,数里入云峰。5月-235月-2307:37:0007:37:00May 21,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。21 五月 20237:37:00 上午07:37:005月-2315、楚塞三湘接,荆门九派通。五月 237
28、:37 上午5月-2307:37May 21,202316、少年十五二十时,步行夺得胡马骑。2023/5/21 7:37:0007:37:0021 May 202317、空山新雨后,天气晚来秋。7:37:00 上午7:37 上午07:37:005月-239、杨柳散和风,青山澹吾虑。5月-235月-23Sunday,May 21,202310、阅读一切好书如同和过去最杰出的人谈话。07:37:0007:37:0007:375/21/2023 7:37:00 AM11、越是没有本领的就越加自命不凡。5月-2307:37:0007:37May-2321-May-2312、越是无能的人,越喜欢挑剔别人
29、的错儿。07:37:0007:37:0007:37Sunday,May 21,202313、知人者智,自知者明。胜人者有力,自胜者强。5月-235月-2307:37:0007:37:00May 21,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。21 五月 20237:37:00 上午07:37:005月-2315、最具挑战性的挑战莫过于提升自我。五月 237:37 上午5月-2307:37May 21,202316、业余生活要有意义,不要越轨。2023/5/21 7:37:0007:37:0021 May 202317、一个人即使已登上顶峰,也仍要自强不息。7:37:00 上午7:37 上午07:37:005月-23MOMODA POWERPOINTLorem ipsum dolor sit amet,consectetur adipiscing elit.Fusce id urna blandit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis ut cursus.感感 谢谢 您您 的的 下下 载载 观观 看看专家告诉