《串操作类指令.pptx》由会员分享,可在线阅读,更多相关《串操作类指令.pptx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、串操作类指令第 2 章串数据类型串操作指令的操作数是串操作指令的操作数是主存中连主存中连续存放的数据串(续存放的数据串(String)即即在连续的主存区域中,字节或字的在连续的主存区域中,字节或字的序列序列串操作指令的串操作指令的操作对象是以字操作对象是以字(W)为单位的字串,或是以字节)为单位的字串,或是以字节(B)为单位的字节串)为单位的字节串第 2 章串寻址方式源操作数用寄存器源操作数用寄存器SI寻址,默认在数据段寻址,默认在数据段DS中,但允许段超越:中,但允许段超越:DS:SI目的操作数用寄存器目的操作数用寄存器DI寻址,默认在附加段寻址,默认在附加段ES中,不允许段超越:中,不允许
2、段超越:ES:DI每执行一次串操作指令,每执行一次串操作指令,SI和和DI将自动修改:将自动修改:n1(对于字节串)或(对于字节串)或2(对于字串)(对于字串)n执行指令执行指令CLD指令后,指令后,DF = 0,地址指针,地址指针增增1或或2n执行指令执行指令STD指令后,指令后,DF = 1,地址指针,地址指针减减1或或2第 2 章串传送MOVS(move string)把字节或字操作数从主存的源地把字节或字操作数从主存的源地址传送至目的地址址传送至目的地址MOVSBMOVSB;字节串传送:;字节串传送:ES:DIDS:SIES:DIDS:SI;SISISISI1 1,DIDIDIDI1
3、1MOVSWMOVSW;字串传送:;字串传送:ES:DIDS:SIES:DIDS:SI;SISISISI2 2,DIDIDIDI2 2例例2.52:字节串传送:字节串传送mov si,offset sourcemov 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 1j
4、nz againjnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束offsetoffset是汇编操作符,是汇编操作符,求出变量的偏移地址求出变量的偏移地址例例2.52:字串传送:字串传送mov si,offset sourcemov si,offset sourcemov di,offset destinationmov di,offset destinationmov cx,mov cx,5050;cxcx传送次数传送次数cldcld;置;置DF=0DF=0,地址增加,地址
5、增加again:again: movsbmovsb;传送一个字传送一个字dec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0,则到,则到againagain位置执行指令位置执行指令;否则,结束;否则,结束第 2 章串存储STOS(store string)把把AL或或AX数据传送至目的地址数据传送至目的地址STOSBSTOSB;字节串存储:;字节串存储:ES:DIALES:DIAL;DIDIDIDI1 1STOSWSTOSW;字串存储:;字串存储:ES:DIAXES:DIAX;DIDI
6、DIDI2 2例例2.53:串存储:串存储mov ax,0mov ax,0mov di,0mov di,0mov cx,8000hmov cx,8000h;cxcx传送次数(传送次数(323210241024)cldcld;DF=0DF=0,地址增加,地址增加again:again: stoswstosw;传送一个字;传送一个字dec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again;传送次数;传送次数cxcx是否为是否为0 0 可将可将CLD改为改为STD吗?如何改用吗?如何改用STOSB? 可不用给可不用给DI赋值吗?赋值吗?DI为偶数即可为偶数即可第 2
7、 章串读取LODS(load string)把指定主存单元的数据传送给把指定主存单元的数据传送给AL或或AXLODSBLODSB;字节串读取:;字节串读取:ALDS:SIALDS:SI;SISISISI1 1LODSWLODSW;字串读取:;字串读取:AXDS:SIAXDS:SI;SISISISI2 2例例2.54:串读取:串读取1mov si,offset blockmov si,offset blockmov di,offset dplusmov di,offset dplusmov bx,offset dminusmov bx,offset dminusmov ax,dsmov ax,d
8、smov es,axmov es,ax;数据都在一个段中,所以设置;数据都在一个段中,所以设置es=dses=dsmov cx,countmov cx,count;cxcx字节数字节数cldcld例例2. 54:串读取:串读取2go_on:go_on: lodsblodsb;从;从blockblock取出一个数据取出一个数据test al,80htest al,80h;检测符号位,判断是正是负;检测符号位,判断是正是负jnz minusjnz minus;符号位为;符号位为1 1,是负数,转向,是负数,转向minusminusstosbstosb;符号位为;符号位为0 0,是正数,存入,是正数
9、,存入dplusdplusjmp againjmp again;程序转移到;程序转移到againagain处继续执行处继续执行jnz go_onjnz go_on;完成正负数据分离;完成正负数据分离例例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 stri
10、ng)将主存中的源操作数减去至目的操作将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数,以便设置标志,进而比较两操作数之间的关系数之间的关系CMPSBCMPSB;字节串比较:;字节串比较:DS:SIDS:SIES:DIES:DI;SISISISI1 1,DIDIDIDI1 1CMPSWCMPSW;字串比较:;字串比较:DS:SIDS:SIES:DIES:DI;SISISISI2 2,DIDIDIDI2 2例例2.55:比较字符串:比较字符串mov si,offset string1mov si,offset string1mov di,offset string2mov di
11、,offset string2mov cx,countmov cx,countcldcldagain:again: cmpsbcmpsb;比较两个字符;比较两个字符jnz unmatjnz unmat;有不同字符,转移;有不同字符,转移dec cxdec cxjnz againjnz again;进行下一个字符比较;进行下一个字符比较mov al,0mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp outputjmp output;转向;转向outputoutputunmat:unmat: mov al,0ffhmov al,0ffh;设置;设置ffhffhoutput:
12、output: mov result,almov result,al;输出结果标记;输出结果标记第 2 章串扫描SCAS(scan string)将将AL/AX减去至目的操作数,以便设减去至目的操作数,以便设置标志,进而比较置标志,进而比较AL/AX与操作数之与操作数之间的关系间的关系SCASBSCASB;字节串扫描:;字节串扫描:ALALES:DIES:DI;DIDIDIDI1 1SCASWSCASW;字串扫描:;字串扫描:AXAXES:DIES:DI;DIDIDIDI2 2例例2.56:查找字符串:查找字符串mov di,offset stringmov di,offset stringm
13、ov al,20hmov al,20hmov cx,countmov cx,countcldcldagain:again: scasbscasb;搜索;搜索jz foundjz found;为;为0 0(ZF=1ZF=1),发现空格),发现空格dec cxdec cx;不是空格;不是空格jnz againjnz again;搜索下一个字符;搜索下一个字符.;不含空格,则继续执行;不含空格,则继续执行found:found: .第 2 章重复前缀指令(repeat)串操作指令执行一次,仅对数据串中串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串的一个字节或字量进行操作。但是串操作
14、指令前,都可以加一个重复前缀,操作指令前,都可以加一个重复前缀,实现串操作的重复执行。重复次数隐实现串操作的重复执行。重复次数隐含在含在CX寄存器中寄存器中重复前缀分重复前缀分2类,类,3条指令:条指令:n配合不影响标志的配合不影响标志的MOVS、STOS(和(和LODS)指令的)指令的REP前缀前缀n配合影响标志的配合影响标志的CMPS和和SCAS指令的指令的REPZ和和REPNZ前缀前缀第 2 章REP重复前缀指令REP前缀可以理解为:当数据串前缀可以理解为:当数据串没有结束没有结束(CX0),则继续传送,则继续传送例例2.52和和例例2.53中,程序段的最后中,程序段的最后3条指令,可以
15、分别替换为:条指令,可以分别替换为:REP MOVSB 和和 REP STOSWREPREP;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;直到;直到CXCX0 0,重复执行结束,重复执行结束重复串传送(例(例2.52)mov si,offset sourcemov si,offset sourcemov di,offset destinationmov di,offset destinationmov cx,100mov cx,100;cxcx传送次数传送次数cldcldrep movsbrep movsbagain:again:movsbmovsb;传送一个字节;传送一个字节d
16、ec cxdec cx;传送次数减;传送次数减1 1jnz againjnz again ;判断传送次数;判断传送次数cxcx是否为是否为0 0;不为;不为0 0(ZF=0ZF=0),则转移),则转移againagain位置执行位置执行;否则,结束;否则,结束第 2 章重复串存储(例(例2.53)mov ax,0mov ax,0mov di,0mov di,0mov cx,8000hmov cx,8000hcldcldrep stoswrep stoswagain:again: stoswstosw;传送一个字;传送一个字dec cxdec cx;传送次数减;传送次数减1 1jnz again
17、jnz again;判断传送次数;判断传送次数cxcx是否为是否为0 0第 2 章第 2 章REPZ重复前缀指令REPZ/REPE前缀可以理解为:当前缀可以理解为:当数据串没有结束数据串没有结束(CX0),并且,并且串相等串相等(ZF1),则继续比较,则继续比较REPZREPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断ZFZF是否为是否为0 0,;只要;只要CXCX0 0或或ZFZF0 0,重复执行结束,重复执行结束第 2 章REPNZ重复前缀指令REPNZ/REPNE前缀可以理解为:前缀可以理解为:当数据串没有结束当数据串没有结束(CX0),并,并且串不相等且
18、串不相等(ZF0),则继续比,则继续比较较REPZREPZ;每执行一次串指令,;每执行一次串指令,CXCX减减1 1;并判断;并判断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 u
19、nmat;字符串不等,转移;字符串不等,转移mov al,0mov al,0;字符串相等,设置;字符串相等,设置00h00hjmp outputjmp output;转向;转向outputoutputunmat:unmat: mov al,0ffhmov al,0ffh;设置;设置ffhffhoutput:output: mov result,almov result,al;输出结果标记;输出结果标记第 2 章重复比较的解释指令指令repz cmpsbrepz cmpsb结束重复执行的情况结束重复执行的情况 ZF ZF0 0,即,即出现不相等的字符出现不相等的字符 CX CX0 0,即,即比较
20、完所有字符:比较完所有字符:这种情况下,如果这种情况下,如果ZFZF0 0,说明最后一个,说明最后一个字符不等;而字符不等;而ZFZF1 1表示所有字符比较后表示所有字符比较后都相等,也就是两个字符串相同都相等,也就是两个字符串相同所以,重复比较结束后,所以,重复比较结束后,jnz unmat指指令的条件成立令的条件成立ZF0,字符串不相等,字符串不相等例例2.58:查找字符串:查找字符串mov di,offset stringmov di,offset stringmov al,20hmov al,20hmov cx,countmov cx,countcldcldrepnz scasbrep
21、nz scasb;搜索;搜索jz foundjz found;为;为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代码空间多余
22、时也可以用代码空间多余时也可以用NOP填充填充n还可以用还可以用NOP实现软件延时实现软件延时事实上,事实上,NOP和和XCHG AX,AX的指令的指令代码一样,都是代码一样,都是 90H第 2 章段超越前缀指令在允许段超越的存储器操作数之在允许段超越的存储器操作数之前,使用段超越前缀指令,将采前,使用段超越前缀指令,将采用指定的段寄存器寻址操作数用指定的段寄存器寻址操作数CS:;使用代码段的数据;使用代码段的数据SS:;使用堆栈段的数据;使用堆栈段的数据DS:;使用数据段的数据;使用数据段的数据ES:;使用附加段的数据;使用附加段的数据第 2 章封锁前缀指令LOCK;封锁总线;封锁总线这是一
23、个指令前缀,可放在任何这是一个指令前缀,可放在任何指令前指令前这个前缀使得在这个指令执行时这个前缀使得在这个指令执行时间内,间内,8086 处理器的封锁输出引处理器的封锁输出引脚有效,即把总线封锁,使别的脚有效,即把总线封锁,使别的控制器不能控制总线;直到该指控制器不能控制总线;直到该指令执行完后,总线封锁解除令执行完后,总线封锁解除第 2 章暂停指令HLT;进入暂停状态;进入暂停状态暂停指令使暂停指令使CPU进入暂停状态,这时进入暂停状态,这时CPU不进行任何操作。当不进行任何操作。当CPU发生复发生复位或来自外部的中断时,位或来自外部的中断时,CPU脱离暂脱离暂停状态停状态HLT指令可用于
24、程序中等待中断。当指令可用于程序中等待中断。当程序中必须等待中断时,可用程序中必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行脱离暂停状态,返回执行HLT的的下一条指令下一条指令第 2 章交权指令ESC 6位立即数位立即数,reg/mem;把浮点指令交给浮点处理器执行;把浮点指令交给浮点处理器执行浮点协处理器浮点协处理器8087指令是与指令是与8086的整数指令组合的整数指令组合在一起的,当在一起的,当8086发现是一条浮点指令时,就利发现是一条浮点指令时,就利用用ESC指令将浮点指令交给指令将浮点指令交给8087执行执行
25、实际编写程序时,一般采用易于理解的浮点指令实际编写程序时,一般采用易于理解的浮点指令助记符格式助记符格式ESC 6,SI;实数除法指令:;实数除法指令:FDIV dword ptr SIESC 20H,AL;整数加法指令:;整数加法指令:FADD ST(0),ST第 2 章第 2 章等待指令WAIT;进入等待状态;进入等待状态8086利用利用WAIT指令和测试引脚实现与指令和测试引脚实现与8087同步运行同步运行浮点指令经由浮点指令经由8086处理发往处理发往8087,并,并与与8086本身的整数指令在同一个指令本身的整数指令在同一个指令序列;而序列;而8087执行浮点指令较慢,所执行浮点指令
26、较慢,所以以8086必须与必须与8087保持同步保持同步第 2 章第2章 总结本章详细而完整地介绍了本章详细而完整地介绍了8086的的16位位指令系统的每条指令指令系统的每条指令希望大家进行一下整理(总结):希望大家进行一下整理(总结):n寻址方式寻址方式n指令支持的操作数形式指令支持的操作数形式n指令对标志的影响指令对标志的影响n常见编程问题常见编程问题通过复习整理,形成指令系统的整体通过复习整理,形成指令系统的整体概念,进而掌握常用指令概念,进而掌握常用指令第2章 教学要求(4)1.熟悉熟悉串操作寻址特点串操作寻址特点2.掌握基本指令:掌握基本指令:MOVSLODSSTOS、REP3.熟悉特色指令:熟悉特色指令:CMPSSCAS、 NOP4.了解不常使用的指令:了解不常使用的指令:REPZREPNZ 、LOCKHLTESCWAIT5.习题习题4(p70)2.15 2.16 2.26 串传送 MOVSB (正向 DF0 )串传送 MOVSW (反向 DF1 )LODS (正向 DF0 )STOS(正向 DF0 )REP STOSB (正向 DF0 )REP MOVSB (正向 DF0 )