1、16.处理机控制指令处理机控制指令1)标志处理指令标志处理指令CLC,STC,CMC,CLD,STD,CLI,STI2)处理机控制指令处理机控制指令HLT,NOP,WAIT,ESC,LOCK21)标志处理指令标志处理指令设置和清除标志的指令,只影响指令指定的标志设置和清除标志的指令,只影响指令指定的标志32)处理机控制指令处理机控制指令暂停指令暂停指令HLT格式格式HLT执行执行使使CPU处于暂停状态处于暂停状态用于等待外部中断,中断处理结束后,用于等待外部中断,中断处理结束后,继续执行继续执行HLT后的下一条指令后的下一条指令例例、STI;允许外部中断允许外部中断HLT;等待中断等待中断MO
2、VAX,0、4空操作指令空操作指令NOP格式格式NOP指令不执行任何操作指令不执行任何操作例:例:(也可用(也可用NOP指令进行短延时指令进行短延时(教材中的一些例子用到)教材中的一些例子用到)其机器码占一个字节单元,其机器码占一个字节单元,在调试程序时,修改程序用。在调试程序时,修改程序用。57串处理指令串处理指令l串的基本概念串的基本概念 顺序存放在内存中的一组数据,称为串。顺序存放在内存中的一组数据,称为串。用串的首(末)地址、元素类型、串的长度表示。用串的首(末)地址、元素类型、串的长度表示。6l串操作种类串操作种类串传送串传送将串从内存某一区域传送到另一区域。将串从内存某一区域传送到
3、另一区域。从串取从串取从串中取出某一元素。从串中取出某一元素。存入串存入串将某个数据存入串中。将某个数据存入串中。串比较串比较对两个串进行比较。对两个串进行比较。搜索串搜索串在串中搜索(查找)某数据(关键字)在串中搜索(查找)某数据(关键字)7l串处理指令格式串处理指令格式重复控制前缀重复控制前缀串指令串指令控制重复次数基本操作控制重复次数基本操作MOVSB、MOVSW串传送串传送REPLODSB、LODSW从串取从串取REPZSTOSB、STOSW存入串存入串REPNZCMPSB、CMPSW串比较串比较SCASB、SCASW搜索串搜索串例例REPMOVSBREPZCMPSBREPNZSCAS
4、W8 串指令串指令l串传送串传送MOVSl从串取从串取LODSl存入串存入串STOSl串比较串比较CMPSl搜索串搜索串SCAS9串指令的特点串指令的特点指令给出串操作的种类、类型,而操作数隐含给出。指令给出串操作的种类、类型,而操作数隐含给出。如如MOVSB;字节字节MOVSW;字字源串源串由由DS:SI指向的单元指向的单元目的串目的串由由ES:DI指向的单元指向的单元指令执行后,指针据指令执行后,指针据DF标志、操作类型自动修改标志、操作类型自动修改字节操作字节操作1;字操作字操作2DF=0用用+;DF=1用用-10对只有一个存储器操作数的串指令对只有一个存储器操作数的串指令如如LODS(
5、从串取)(从串取)STOS(存入串)(存入串)SCAS(搜索串)(搜索串)另一个操作数在另一个操作数在AL(字节操作字节操作)或或AX(字操作字操作)CMPS(串比较串比较)、SCAS(串搜索串搜索)影响影响标志,标志,MOVS(串传送串传送)、LODS(从串取从串取)、STOS(存入串存入串)不影响不影响标志。标志。11l串传送串传送 格式格式MOVSB字节传送字节传送MOVSW字传送字传送 MOVSB执行操作执行操作(ES:DI)(DS:SI)字节传送字节传送(SI)(SI)1修改源串指针修改源串指针(DI)(DI)1修改目的串指针修改目的串指针其中:其中:DF=0,用,用+DF=1,用,
6、用-MOVSW执行操作执行操作(ES:DI)(DS:SI)字传送字传送(SI)(SI)2修改源串指针修改源串指针(DI)(DI)2修改目的串指针修改目的串指针12l从串取从串取 格式格式LODSB取字节取字节LODSW取字取字 LODSB执行操作执行操作(AL)(DS:SI)从源串取入从源串取入AL(SI)(SI)1修改源串指针修改源串指针 LODSW执行操作执行操作(AX)(DS:SI)从源串取入从源串取入AX(SI)(SI)2修改源串指针修改源串指针13l存入串存入串 格式格式STOSB存入字节存入字节STOSW存入字存入字 STOSB执行操作执行操作(ES:DI)(AL)将将AL存入目的
7、串存入目的串(DI)(DI)1修改目的串指针修改目的串指针 STOSW执行操作执行操作(ES:DI)(AX)将将AX存入目的串存入目的串(DI)(DI)2修改目的串指针修改目的串指针14l串比较串比较 格式格式CMPSB字节比较字节比较CMPSW字比较字比较 CMPSB执行操作执行操作(DS:SI)-(ES:DI)字节比较字节比较(SI)(SI)1修改源串指针修改源串指针(DI)(DI)1修改目的串指针修改目的串指针 CMPSW执行操作执行操作(DS:SI)-(ES:DI)字比较字比较(SI)(SI)2修改源串指针修改源串指针(DI)(DI)2修改目的串指针修改目的串指针注意:注意:1.源串源
8、串-目的串目的串2.两数相减,只影响标志,不影响操作数两数相减,只影响标志,不影响操作数15l搜索串搜索串 格式格式SCASB取字节取字节SCASW取字取字 SCASB执行操作执行操作(AL)-(ES:DI)从目的串搜索字节从目的串搜索字节(DI)(DI)1修改目的串指针修改目的串指针 SCASW执行操作执行操作 (AX)-(ES:DI)从目的串搜索字节从目的串搜索字节(DI)(DI)2修改目的串指针修改目的串指针两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。16 重复控制前缀重复控制前缀重复前缀重复前缀REP当相等重复前缀当相等重复前缀REPZ/REPE当不相等重复
9、前缀当不相等重复前缀REPNZ/REPNE17l重复前缀重复前缀REP执行过程:执行过程:(1)当当(CX)=0,结束,结束REP,执行执行REP下一条指令。下一条指令。(2)当当(CX)0,将,将CX的的内容减内容减1,执执行行REP后后的的串串指指令令,返返回回(1)。例例LEADI,destinationLEASI,sourceMOVCX,20REPMOVSBMOVAX,0u只在只在(CX)=0时退出循环时退出循环18l当相等重复前缀当相等重复前缀REPZ执行过程:执行过程:(1)当当(CX)=0,结束结束REPZ,执行执行REPZ下一条指令;下一条指令;(2)当当(CX)0,将,将CX
10、的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3)当当ZF=1,返回返回(1);(4)当当ZF1,则结束则结束REPZ,执行执行REPZ下一条指令。下一条指令。u(CX)减减1操作不影响标志操作不影响标志uZF标志由串操作决定标志由串操作决定19l当不相等重复前缀当不相等重复前缀REPNZ执行过程:执行过程:(1)当当(CX)=0,结束结束REPNZ,执行执行REPNZ下一条指令。下一条指令。(2)当当(CX)0,将,将CX的内容减的内容减1,执行执行REPNZ后的串指令。后的串指令。(3)当当ZF=0,返回返回(1);(4)当当ZF0,则结束则结束REPNZ,执行执行REPN
11、Z下一条指令。下一条指令。20例例1用用REPMOVS进行数据块传送。进行数据块传送。编程:编程:设置传送方向设置传送方向用用CLD使使DF=0,地址增加方向(正向)地址增加方向(正向)用用STD使使DF=1,地址减小方向(反向)地址减小方向(反向)设置源串地址设置源串地址将源串首地址将源串首地址(DF=0),或末地址(,或末地址(DF=1)放入)放入DS、SI中。中。设置目的串地址设置目的串地址将目的串首地址将目的串首地址(DF=0),或末地址(,或末地址(DF=1)放入)放入ES、DI中。中。设置串长度设置串长度将串的长度(传送次数)放入将串的长度(传送次数)放入CX中。中。字节传送字节传
12、送用用REPMOVSB字传送字传送用用REPMOVSW21例例1编程将存放在编程将存放在str1中的中的4字节字符串传送到字节字符串传送到str2定义的缓冲区中。定义的缓冲区中。DCBAstr1str222data1SEGMENTstr1DBABCD;源串源串data1ENDSdata2SEGMENTstr2DB4DUP(?);缓冲区缓冲区data2ENDScodeSEGMENT、CLD;DF=0,正方向传送正方向传送MOVAX,data1;源串首地址的段值源串首地址的段值DSMOVDS,AXLEASI,str1;源串首地址的偏值源串首地址的偏值SIMOVAX,data2;目的串首地址的段值目
13、的串首地址的段值ESMOVES,AXLEADI,str2;目的串首地址的偏值目的串首地址的偏值DIMOVCX,4;串长度串长度CXREPMOVSB;串传送串传送、codeENDS23data1SEGMENTstr1DBABCDdata1ENDSdata2SEGMENTstr2DB4DUP(?)data2EMDScodeSEGMENT、CLDMOVAX,data1MOVDS,AXLEASI,str1MOVAX,data2MOVES,AXLEADI,str2MOVCX,4REPMOVSB、codeENDS假设程序经汇编、连接后,装入内存的情况如下假设程序经汇编、连接后,装入内存的情况如下:24程序
14、执行结果:程序执行结果:25例例2比较比较string1和和string2的两串的两串,长度为长度为8字节字节26用用REPZCMPS进行串比较进行串比较编程:编程:设置比较方向设置比较方向(STD或或CLD)设置源串、目的串地址设置源串、目的串地址将源串首地址将源串首地址(DF=0时时),或末地址(,或末地址(DF=1时)放入时)放入DS、SI将目的串首地址将目的串首地址(DF=0时时),或末地址(,或末地址(DF=1时)放入时)放入ES、DI设置串长度设置串长度将串的长度放入将串的长度放入CX中中按按字节比较字节比较用用REPZCMPSB按按字比较字比较用用REPZCMPSW27执行完执行
15、完REPZCMPS后,根据后,根据ZF判断两串比较结果。判断两串比较结果。若若ZF=1,两串相等,此时:两串相等,此时:CX=0,表明串中所有元素已比较完毕表明串中所有元素已比较完毕SI、DI指向串尾的下一单元。指向串尾的下一单元。若若ZF=0,两串不等,此时:两串不等,此时:CX的值为剩下的未比较的元素个数。的值为剩下的未比较的元素个数。SI、DI指向不相等元素的下一元素。指向不相等元素的下一元素。28codeSEGMENT、CLD;DF=0,正向比较正向比较MOVAX,SEGstring1;源串首地址源串首地址DS:SIMOVDS,AXLEASI,string1MOVAX,SEGstrin
16、g2;目的串首地址目的串首地址ES:DIMOVES,AXLEADI,string2MOVCX,8;串长度串长度CXREPZCMPSB;串比较串比较JZequal;利用利用ZF判断比较结果判断比较结果不相等处理不相等处理JMPexitequal:相等处理相等处理exit:、codeENDS29codeSEGMENT、CLD;DF=0,正向比较正向比较MOVAX,SEGstring1;源串首地址源串首地址DS:SIMOVDS,AXLEASI,string1MOVAX,SEGstring2;目的串首地址目的串首地址ES:DIMOVES,AXLEADI,string2MOVCX,8;串长度串长度CXR
17、EPZCMPSBJZ equal 不相等处理不相等处理 JMP exit equal:相等处理相等处理 exit:、codeENDSJNZnotequ相等处理相等处理JMPexitnotequ:不相等处理不相等处理exit:、30执行完执行完REPZCMPSB后,此时:后,此时:ZF=1,两串相等两串相等CX=0,两串所有元素已比较完两串所有元素已比较完SI、DI串尾的下一单元串尾的下一单元例例31执行完执行完REPZCMPSB后,此时:后,此时:ZF=0,两串不等两串不等CX=3,剩下的未比较的元素个数剩下的未比较的元素个数SI、DI指向不相等元素的下一元素。指向不相等元素的下一元素。例例3
18、2例例3用用REPNZSCAS在串中找关键字。在串中找关键字。编程步骤:编程步骤:设置查找方向设置查找方向设置串地址设置串地址将串的首地址将串的首地址(DF=0时时),或末地址(,或末地址(DF=1时)放入时)放入ES、DI中。中。设置关键字设置关键字将关键字放入将关键字放入AL(关键字为字节关键字为字节)或或放入放入AX(关键字为字关键字为字)。设置串长度设置串长度将串的长度放入将串的长度放入CX中。中。查找字节查找字节用用REPNZSCASB查找字查找字用用REPNZSCASW33执行完执行完REPNZSCAS后,根据后,根据ZF判断查找结果。判断查找结果。若若ZF=1,则串中有关键字,此
19、时:则串中有关键字,此时:CX的值为剩下的未搜索的元素个数,的值为剩下的未搜索的元素个数,DI指向关键字元素的下一元素,指向关键字元素的下一元素,而关键字而关键字在在(DI)-1的位置的位置若若ZF=0,则串中无关键字,此时:则串中无关键字,此时:CX=0,表明串中所有元素以搜索完毕,表明串中所有元素以搜索完毕DI指向串尾的下一单元。指向串尾的下一单元。34例例、REPNZSCASBJZfound未找到处理未找到处理JMPexitfound:找到处理找到处理exit:、35串指令可单独使用串指令可单独使用MOVAL,SIMOVES:DI,AL等价于等价于MOVSBINCSIINCDI(假设假设
20、DF=0)next:JCXZexitDECCXMOVSB等价于等价于REPMOVSBJMPnextexit:、说明:说明:36下面程序段完成字传送下面程序段完成字传送(8000:1000H)(4000:2000H)MOVAX,4000HMOVDS,AXMOVSI,2000HMOVAX,8000HMOVES,AXMOVDI,1000HMOVSW37可在有源操作数的串指令前使用段跨越前缀,可在有源操作数的串指令前使用段跨越前缀,此时:源串操作数的段值由段跨越前缀指定此时:源串操作数的段值由段跨越前缀指定。包括指令包括指令MOVS、LODS、CMPS例例ES:MOVSB执行执行(ES:DI)(ES:
21、SI)而不是而不是(ES:DI)(DS:SI)ES:SCASB没有源串没有源串ES:STOSW目的串操作数不允许使用段跨越前缀,目的串操作数不允许使用段跨越前缀,即串指令前的段跨越前缀必指源串操作数即串指令前的段跨越前缀必指源串操作数。38重复前缀中重复前缀中CX减减1操作,不影响标志。操作,不影响标志。39几种操作复习几种操作复习40DSESSSCSIP数据暂存器数据暂存器PSW标志标志寄存器寄存器执行部件控制电路执行部件控制电路指令译码器指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地地址址加加法法器器、指令指令1指令指令2指令指令3指令指令4、数据数据1数据数据2数据数据3、地址总线地址总线AB数据总线数据总线DB控制总线控制总线CB地地址址译译码码器器41本节结束,谢谢合作!本节结束,谢谢合作!请继续学习下面的内容!请继续学习下面的内容!