微机原理第3章

上传人:大米 文档编号:591454947 上传时间:2024-09-17 格式:PPT 页数:194 大小:1.14MB
返回 下载 相关 举报
微机原理第3章_第1页
第1页 / 共194页
微机原理第3章_第2页
第2页 / 共194页
微机原理第3章_第3页
第3页 / 共194页
微机原理第3章_第4页
第4页 / 共194页
微机原理第3章_第5页
第5页 / 共194页
点击查看更多>>
资源描述

《微机原理第3章》由会员分享,可在线阅读,更多相关《微机原理第3章(194页珍藏版)》请在金锄头文库上搜索。

1、第3章 8086/8088指令系统9/17/20241第3章8086/8088指令系统n3.18086/8088指令格式n3.28086/8088寻址方式n3.38086/8088指令系统9/17/202423.18086/8088指令格式9/17/202433.28086/8088寻址方式n一条指令包含操作码(OP)和操作数两部分:操作码指明该指令进行什么操作操作数指出该指令在执行规定操作时所需的信息n规定操作数的方法,即指令中用于说明操作数所在地址的方法称为寻址方式。8086/8088的寻址方式分为两类:数据寻址方式转移地址寻址方式9/17/202443.2.1数据寻址方式n指令中用于说明

2、操作数所在地址的方法9/17/202451.立即寻址n当数据为8位或16位时,可直接放在指令本身的最后一个字节(8位)或两个字节(16位)中。这样的数据常称为立即操作数MOVAL,80H;将8位立即数80H送入AL寄存器中MOVAX,1234H;将16位立即数1234H送入AX寄存器中,其中(AX)=1234H9/17/20246立即数寻址方式举例9/17/202472.寄存器寻址n数据存放在指令规定的寄存器中n对于16位数据,寄存器可以是AX,BX,CX,DX,SI,DI,SP或者BPn对于8位数据,寄存器可以是AL,AH,BL,BH,CL,CH,DL或DHMOVCL,DLMOVAX,BX如

3、果(DL)=50H,(BX)=1234H,执行结果为:(CL)=50H,(AX)=1234H9/17/20248寄存器寻址方式的指令执行情况9/17/202493.直接寻址n操作数在存储单元中,其16位有效地址,即段内偏移地址在指令码之中,占两个字节。此存储单元的实际物理地址是由段寄存器内容和指令码中直接给出的有效地址之和形成的MOVAL,1064H如果(DS)=2000H,执行结果为:(AL)=45H。9/17/202410直接寻址示意图9/17/2024114.寄存器间接寻址n操作数在存储单元中,其有效地址在指令码指明的基址寄存器BX、BP或变址寄存器SI或DI之中n寄存器间接寻址的操作数

4、一定存放在存储单元中。BX、SI和DI间接寻址默认的段寄存器为DS,而BP间接寻址默认的段寄存器为SSn有效地址9/17/202412举例MOVAX,SIMOVBX,AL如果(DS)=3000H,(SI)=2000H,(BX)=1000H,(AL)=64H,执行结果为:(AX)=4050H,(31000H)=64H9/17/2024135.寄存器相对寻址n有效地址在一般情况下,若指令中指定的寄存器是BX、SI、DI,则操作数默认为存放在数据段(DS)中;若指令中指定的寄存器是BP,则操作数默认为存放在堆栈段(SS)中9/17/202414举例MOVSI+10H,AXMOVCX,BX+COUNT

5、如果(DS)=3000H,(SI)=2000H,(BX)=1000H,COUNT=1050H,(AX)=4050H,执行结果为:(32010H)=4050H,(CX)=4030H。9/17/2024156.基址变址寻址n有效地址在一般情况下,由基址寄存器决定操作数在哪个段中。若用BX的内容作为基地址,则操作数在数据段(DS)中;若用BP的内容作为基地址,则操作数在堆栈段(SS)中。9/17/202416举例MOVBX+DI,AXMOVCX,BPSI设当前(DS)=3000H,(SS)=4000H,(BX)=1000H,(DI)=1100H,(AX)=0050H,(BP)=2000H,(SI)=

6、1200H,执行结果为:(32100H)=0050H,(CX)=3412H。9/17/2024177.基址变址且相对寻址n有效地址当基址寄存器为BX时,操作数在数据段(DS)中;基址寄存器为BP时,操作数在堆栈段(SS)中。基址变址相对寻址方式同样也允许段超越。9/17/202418举例MOVAX,BX+DI+1200HMOVBP+SI+200H,CX若(DS)=8000H,(SS)=6000H,(BX)=1000H,(DI)=1500H,(BP)=1000H,(SI)=1600H,(CX)=7856H,执行结果为:(AX)=8056H,(62800H)=7856H9/17/2024198.隐

7、含寻址n有些指令的指令码中不包含指明操作数地址的部分,而其操作码本身隐含地指明了操作数地址n字符串操作类指令就属于这种寻址9/17/202420举例n若(BX)=1200H,(SI)=0A00H,位移量=0710H,(DS)=3200H,(SS)=5000H,(BP)=2200H,段寄存器按默认段寄存器,则相对于各种寻址方式的有效地址和物理地址9/17/202421举例(续)(1)直接寻址:EA=0710H物理地址=32000H+0710H=32710H(2)寄存器间接寻址(假设寄存器为BP):EA=2200H物理地址=50000H+2200H=52200H(3)寄存器相对寻址(假设寄存器为B

8、X):EA=1200H+0710H=1910H物理地址=32000H+1910H=33910H(4)基址变址寻址(假设寄存器为BP和SI):EA=2200H+0A00H=2C00H物理地址=50000H+2C00H=52C00H(5)基址变址且相对寻址(假设寄存器为BX和SI):EA=1200H+0A00H+0710H=2310H物理地址=32000H+2310H=34310H9/17/2024223.2.2转移地址寻址方式n程序转移是在程序转移指令的控制下实现的n程序转移指令通过改变IP和CS的内容,就可以改变程序的正常执行顺序n转移地址的寻址方式有4种9/17/2024231.段内直接寻址

9、n指令码中包括一个位移量disp,转移的有效地址为(IP)+dispndisp在指令码中都是用补码表示的有正负符号的数。当位移量是8位时,称为短转移,转移范围为128+127;位移量是16位时,称为近转移,转移范围为32768+32767n位移量是相对于当前IP的内容来计算的,所以又称为相对寻址JMPNEARPTRPROGIAJMPSHORTQUEST其中,PROGIA和QUEST均为转向的目标地址,在机器指令中,用位移量来表示9/17/2024242.段内间接寻址n在同一代码段内,要转移到的地址的16位段内偏移地址(即有效地址)在一个16位寄存器中或在存储器相邻两个单元中n存放转移地址寄存器

10、或相邻两个单元的第一个单元的地址,是在指令码中以上面讨论的数据的寻址方式给出的JMPBXJMPWORDPTRBP+10H其中WORDPTR为操作符,用以指出其后的寻址方式所取得的目标地址是一个字的有效地址9/17/2024253.段间直接寻址n令码中直接给出16位的段地址和16位的有效地址JMPFARPTRLABEL_NAME其中,LABEL_NAME是一个在另外的代码段内已定义的远标号9/17/2024264.段间间接寻址n与段内间接寻址相似,转移地址为32位(16位段地址和16位有效地址)n指令中一定给出某种访问内存单元的寻址方式。用这种寻址方式计算出的存储单元地址开始的连续4个单元的内容

11、就是要转移的地址,其中前两个单元内的16位值为有效地址,后两个单元内的16位值为段地址JMPVAR_DOUBLEWORDJMPDWORDPTRBX上面第一条指令中,VAR_DOUBLEWORD应是一个已定义为32位的存储器变量;第二条指令中,利用操作符PTR将存储器操作数的类型定义为DWORD(双字)9/17/202427程序转移地址的寻址方式(a)段内直接(相对)寻址;(b)段内间接寻址;(c)段间直接寻址;(d)段间间接寻址9/17/2024283.38086/8088指令系统n数据传送(DataTransfer)指令;n算术运算(Arithmetic)指令;n逻辑运算(Logic)指令;

12、n控制转移(ControlTransfer)指令;n串操作(StringManipulation)指令;n处理器控制(ProcessorControl)指令。9/17/2024293.3.1数据传送指令n通用数据传送指令;n地址传送指令;n累加器专用传送(输入/输出指令);n标志传送指令。9/17/2024301.通用数据传送指令n传送指令MOVn数据交换指令XCHGn堆栈指令PUSH和POP9/17/202431(1)通用传送指令MOV(MOVe)n格式:MOVDST,SRC;(DST)(SRC)nDST:目的操作数,SRC:源操作数。n功能:把一个字节或字从源操作数SRC传送至目的操作数D

13、STn源和目的操作数不允许同时为存储器操作数;n源和目的操作数数据类型必须一致;n源和目的操作数不允许同时为段寄存器;n目的操作数不允许为CS和立即数;n当源操作数为立即数时,目的操作数不允许为段寄存器;n传送操作不影响标志位。9/17/202432通用传送指令数据流9/17/202433举例MOVAL,DH;(AL)(DH)MOVDS,AX;(DS)(AX)MOVBX,AX;(BX)(AX)MOVAL,BLOCK;BLOCK为字节型变量名MOVBLOCK,12H;(BLOCK)12HMOVAX,1234H;(AX)1234H9/17/202434(2)交换指令XCHG(Exchange)n格

14、式:XCHGDST,SRC;(DST)(SRC)n功能:交换操作数DST和SRC的值,操作数数据类型为字节或字。允许通用寄存器之间,通用寄存器和存储器之间交换数据。n操作数DST和SRC不允许同为存储器操作数;n操作数数据类型必须一致;n交换指令不影响标志位。9/17/202435举例XCHGAX,BX;通用寄存器之间交换数据XCHGBX,SI;通用寄存器和存储器之间交换数据XCHGAL,BX;通用寄存器和存储器之间交换数据如要实现存储器操作数交换,若BLOCK1和BLOCK2为已定义字变量,可用如下指令实现:MOVAX,BLOCK1XCHGAX,BLOCK2MOVBLOCK1,AX9/17/

15、202436(3)堆栈操作指令n堆栈是以后进先出(LIFO)的规则存取信息的一种存储机构n堆栈通常是存储器的一部分n为了保证堆栈区的存储器能按后进先出的规则存取信息,用堆栈指针SP来管理该存储区的存取地址n在信息的存与取的过程中,栈顶是不断移动的,也称它为堆栈区的动端,而堆栈区的另端则是固定不变的,这端又称其为栈底n堆栈操作指令不影响标志位9/17/202437举例9/17/202438压栈指令PUSH(Pushontothestack)n格式:PUSHSRC;(SP)(SP)-2,(SP)+1,(SP)(SRC)n功能:将源操作数SRC压下堆栈,源操作数允许为16位通用寄存器、存储器和段寄存

16、器,但不允许是立即数。操作数数据类型为字类型,压栈操作使SP值减2。9/17/202439举例PUSHAX;通用寄存器操作数入栈PUSHSI;存储器操作数入栈PUSHCS9/17/202440出栈指令POP(Popfromthestack)n格式:POPDST;(DST)(SP+1),(SP),(SP)(SP)+2n功能:从栈顶弹出操作数送入目的操作数。目的操作数允许为16位通用寄存器、存储器和段寄存器,但不允许是CS和立即数。操作数数据类型为字类型,出栈操作使SP加29/17/202441举例POPAX;操作数出栈送寄存器POPBX;操作数出栈送存储器POPDS9/17/2024422.地址

17、传送指令n地址传送指令对标志位无影响9/17/202443(1)取有效地址指令LEA(Loadeffectiveaddress)n格式:LEAREG,SRC;(REG)SRC的有效地址n功能:将源操作数SRC的有效地址传送到通用寄存器,操作数REG为16位通用寄存器,源操作数为存储器操作数9/17/202444举例LEABX,1200H;(BX)=1200HMOVBX,1200H;(BX)=58A0H图3-12LEA和MOV指令示意图9/17/202445(2)指针送寄存器DS指令LDS(LoadDSwithpointer)n格式:LDSREG,SRC;(REG)(SRC),(DS)(SRC+

18、2)n功能:根据源操作数SRC指定的偏移地址,在数据段中取出段地址和偏移地址分别送指定的段寄存器DS和指定的通用寄存器9/17/202446举例LDSBX,SI;将32位地址指针分别送DS和BXDATADD40003500HLDSBX,DATA;(DS)4000H,(BX)3500H9/17/2024473.累加器专用传送(输入/输出指令)n输入/输出指令(IN/OUT)n查表指令XLAT(Translate)9/17/202448(1)输入/输出指令(IN/OUT)n输入IN指令是将数据(字节/字数据)从一个输入端口传送到累加器(AL或AX)中。输出OUT指令是将数据(字节/字数据)从累加器

19、(AL或AX)传送到一个输出端口中。n输入/输出指令可以分为两大类:一类是直接端口(Port)寻址的输入/输出指令;另一类是通过DX寄存器间接寻址的输入/输出指令。在直接寻址的指令中只能寻址0255个端口,而间接寻址的指令中可寻址整个64K(0000FFFFH)个端口。n输入/输出指令不影响标志位。9/17/202449输入指令IN(Input)n直接寻址格式:INAcc,Port。此指令是将8/16位数据经输入端口Port(地址号0255)送入AL/AX累加器中;n间接寻址格式:INAcc,DX。此指令是从DX寄存器内容指定的端口中将8/16位数据送入AL/AX寄存器中。这种寻址方式端口地址

20、可由16位地址号表示,执行此指令前应将16位地址号存入DX寄存器中9/17/202450输出指令OUT(Output)n直接寻址格式:OUTPort,Acc。此指令是从AL或AX累加器输出8/16位数据到指令直接指定的I/O端口Port中;n间接寻址格式:OUTDX,Acc。此指令是从AL或AX累加器中输出8/16位数据到由DX寄存器内容指定的I/O端口中9/17/202451举例INAL,10HOUT20H,AXOUTDX,ALINAL,DX9/17/202452(2)查表指令XLAT(Translate)n格式:XLAT;(AL)(BX)+(AL)n功能:将寄存器AL中的内容转换成存储器表

21、格中的对应值。实现直接查表功能。n查表指令不影响标志位9/17/202453举例【例3-1】内存中有一起始地址为TABLE的编码表,试编程将表中顺序号为3的存储单元内容送寄存器AL。TABLEDB10H,20H,30H,40H,50H,60H编码表MOVAL,3;(AL)3LEABX,TABLE;BXTABLE表首地址XLAT;结果在AL中,(AL)=40H9/17/2024544.标志寄存器传送指令(1)标志送AH指令LAHF(LoadAHwithflags)n格式:LAHF;(AH)(PSW)低8位n功能:将标志寄存器中低8位送AH中。不影响标志位图3-13LAHF指令示意图9/17/20

22、2455(2)AH送标志寄存器指令SAHF(StoreAHintoflags)n格式:SAHF;(PSW)低8位(AH)n功能:将AH中内容送标志寄存器中低8位。影响标志位9/17/202456(3)标志进栈指令PUSHF(Pushtheflags)n格式:PUSHF;(SP)(SP)-2,(SP)+1,(SP)(PSW)n功能:将标志寄存器内容压入堆栈,(SP)(SP)-2。不影响标志位9/17/202457(4)标志出栈指令POPF(Poptheflags)n格式:POPF;(PSW)(SP)+1,(SP),(SP)(SP)+2,n功能:将当前栈顶一个字传送到标志寄存器中,(SP)(SP)

23、+2。影响标志位9/17/2024583.3.2算术运算指令n包括加、减、乘、除四种基本算术运算操作及符号扩展指令和十进制算术运算调整指令n二进制加、减法指令,带符号操作数采用补码表示时,无符号数和带符号数据运算可以使用相同的指令n二进制乘、除法指令分带符号数和无符号数运算指令9/17/2024591.加法指令n加法指令ADD(Add)n带进位加法指令ADC(Addwithcarry)9/17/202460(1)加法指令ADD(Add)n格式:ADDDST,SRC;(DST)(DST)+(SRC)n功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。n源操作数SRC可以是通用寄存器

24、、存储器或立即数。目的操作数DST可以是通用寄存器或存储器操作数。SRC和DST都不能为段寄存器9/17/202461(2)带进位加法指令ADC(Addwithcarry)n格式:ADCDST,SRC;(DST)(DST)+(SRC)+CFn功能:ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。nADD,ADC指令影响标志位为OF,SF,ZF,AF,PF,CF9/17/202462举例MOVAX,9876HADDAH,AL;(AX)=0E76HCF=1SF=0OF=0ZF=0AF=0PF=0ADCAH,AL;(AX)=8576HCF=0SF=1OF=1ZF=0A

25、F=1PF=09/17/2024632.减法指令n减法指令SUB(Subtract)n带借位减法指令SBB(Subtractwithborrow)9/17/202464(1)减法指令SUB(Subtract)n格式:SUBDST,SRC;(DST)(DST)-(SRC)n功能:SUB将目的操作数减源操作数,结果送目的操作数。n源操作数SRC可以是通用寄存器、存储器或立即数。目的操作数DST可以是通用寄存器或存储器操作数。SRC和DST都不能为段寄存器9/17/202465(2)带借位减法指令SBB(Subtractwithborrow)n格式:SBBDST,SRC;(DST)(DST)-(SR

26、C)-CFn功能:SBB将目的操作数DST减源操作数SRC,还要减CF(低位借位)值,结果送目的操作数。nSUB,SBB指令影响标志位为OF,SF,ZF,AF,PF,CF9/17/202466举例MOVAX,9966H;(AX)=9966HSUBAL,80H;(AL)=0E6H,CF=1,SF=1,OF=1,ZF=0,AF=0,PF=0SBBAH,80H;(AH)=18H,CF=0,SF=0,OF=0,ZF=0,AF=0,PF=19/17/2024673.增量和减量指令n增量指令INC(Increment)n减量指令DEC(Decrement)9/17/202468(1)增量指令INC(Inc

27、rement)n格式:INCDST;(DST)(DST)+1n功能:INC指令将目的操作数加1,结果送目的操作数DST。目的操作数为通用寄存器或存储器操作数。DST不能为立即数和段寄存器9/17/202469(2)减量指令DEC(Decrement)n格式:DECDST;(DST)(DST)-1n功能:DEC指令将目的操作数DST减1,结果送目的操作数。nINC,DEC指令影响标志位为OF,SF,ZF,AF,PF9/17/202470举例INCBL;(BL)(BL)+1DECAX;(AX)(AX)-1INCWORDPTRBX;(BX)(BX)+19/17/2024714.比较指令CMP(Com

28、pare)n格式:CMPDST,SRC;(DST)-(SRC)只影响标志位n功能:目的操作数DST减源操作数SRC,结果不回送,只影响标志位。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。nCMP指令影响标志位为OF,SF,ZF,AF,PF,CF9/17/202472举例CMPCX,DXCMPWORDPTRSI,3CMPAX,BLOCK;BLOCK为已定义字变量9/17/202473应用若(AX)和(BX)中已存储有数,执行比较指令后,对于两个数的比较(AX)-(BX)有以下2种情况:n两个无符号数比较,使用CF标志位判断。CF=0,则(AX)(BX),若ZF=1

29、,则(AX)=(BX)CF=1,则(AX)(BX)n两个带符号数比较,使用OF标志位判断。当OF=0,SF=0,则(AX)(BX),若ZF=1,则(AX)=(BX)SF=1,则(AX)(BX)当OF=1,SF=0,则(AX)9或(AF)=1则(AL)(AL)+06H,(AF)1如果(AL)9FH或(CF)=1则(AL)(AL)+60H,(CF)1nDAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义9/17/202489举例ADDAL,BLDAA9/17/202490(2)压缩BCD码减法调整指令DAS(Decimaladjustforsubtr

30、action)n格式:DASn功能:将存放在AL中的二进制差数,调整为压缩的BCD码表示形式。n调整方法:如果(AL)0FH)9或(AF)=1则(AL)(AL)06H,(AF)1如果(AL)9FH或(CF)=1则(AL)(AL)60H,(CF)1nDAS指令一般紧跟在SUB或SBB指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义9/17/202491举例SUBAL,BLDAS9/17/20249210.非压缩BCD码算术运算n非压缩BCD数是以一个字节存储1位BCD码,用BCD码来表示十进制数。BCD码的算术运算是在二进制运算基础上进行调整n调整指令有加、减、乘、除四种调整指

31、令9/17/202493(1)非压缩BCD码加法调整指令AAA(ASCIIadjustforaddition)n格式:AAAn功能:将存放在AL中的二进制和数,调整为ASCII码表示的结果。n调整方法:如果((AL)0FH)9或(AF)=1则(AL)(AL)+06H,(AH)(AH)+1,(AF)1,(CF)(AF)(AL)(AL)0FH)否则(AL)(AL)0FH)nAAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为AF,CF。其它标志位无定义9/17/202494举例MOVAX,0006HADDAL,05HAAA;(AX)=0101H9/17/202495(2)非压缩BCD码减法

32、调整指令AAS(ASCIIAdjustforsubtraction)n格式:AASn功能:将存放在AL中的二进制差数,调整为ASCII码表示形式。n调整方法:如果((AL)0FH)9或(AF)=1则(AL)(AL)06H,(AH)(AH)1,(AF)1,(CF)(AF)(AL)(AL)0FH)否则(AL)(AL)0FH)nAAS指令一般紧跟在SUB,SBB指令之后使用,影响标志位为AF,CF。其它标志位无定义9/17/202496(3)非压缩BCD码的乘法调整指令AAM(ASCIIAdjustformultiply)n格式:AAMn功能:将存放在AL中的二进制积数,调整为ASCII码表示形式。

33、n调整方法:(AH)(AL)/0AH的商,即(AL)除以10,商送(AH)。(AL)(AL)/0AH的余数,即(AL)除以10,余数送(AL)。nAAM指令一般紧跟在MUL指令之后使用,影响标志位为SF,ZF,PF。其它标志位无定义9/17/202497举例MOVAL,07HMOVBL,09HMULBL;(AX)=003FHAAM;(AX)=0603H9/17/202498(4)非压缩BCD码的除法调整指令AAD(ASCIIAdjustfordivision)n格式:AADn功能:将AX中两位非压缩BCD码(一个字节存放一位BCD码),转换为二进制数的表示形式。n调整方法:(AL)(AH)0A

34、H+(AL),(AH)0nAAD指令用于二进制除法DIV操作之前,影响的标志位为SF,ZF,PF。其它标志位无定义9/17/202499举例MOVAX,0605HMOVBL,09HAAD;AX=0041HDIVBL;AX=0207H9/17/2024100使用算术运算类指令应注意n如果没有特别规定,参与运算的两个操作数数据类型必须一致,且只允许一个为存储器操作数;n如果参与运算的操作数只有一个,且为存储器操作数,必须使用PTR伪指令说明数据类型;n操作数不允许为段寄存器;目的操作数不允许为立即数;n如果是存储器寻址,则存储器各种寻址方式均可使用。9/17/20241013.3.3逻辑运算指令n

35、逻辑运算指令n移位指令n循环移位指令9/17/20241021.逻辑运算指令(1)逻辑与指令AND(And)n格式:ANDDST,SRC;(DST)(DST)(SRC)n功能:目的操作数DST和源操作数SRC按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。nAND指令影响标志位为SF,ZF,PF,并且使OF=CF=09/17/2024103举例ANDDI,BXANDAL,0FH;(AL)(AL)0FHnAND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1即可9/17/2024104(2)

36、逻辑或指令OR(OR)n格式:ORDST,SRC;(DST)(DST)(SRC)n功能:目的操作数DST和源操作数SRC按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。nOR指令影响标志位为SF,ZF,PF。并且使OF=CF=0nOR指令常用于将操作数中某位置1,只需将要置1的位或1,其它不改变的位或0即可。例如:ORAL,80H;将AL中最高位置19/17/2024105(3)逻辑异或指令XOR(Exclusiveor)n格式:XORDST,SRC;(DST)(DST)(SRC)n功能:目的操作数DST和源操作数SR

37、C按位进行逻辑异或运算,结果送目的操作数。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。nXOR指令影响标志位为SF,ZF,PF,并且使OF=CF=0nXOR指令常用于将操作数中某些位取反,只需将要取反的位异或1,其它不改变的位异或0即可。例如:XORAL,OFH;将AL中低4位取反,高4位保持不变9/17/2024106(4)逻辑非指令NOT(NOT)n格式:NOTDST;(DST)n功能:对目的操作数DST按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。NOT指令对标志位无影响9/17/2024107(5)测试指令TEST(Test)

38、n格式:TESTDST,SRC;(DST)(SRC)影响标志位n功能:目的操作数DST和源操作数SRC按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数nTEST指令影响标志位为SF,ZF,PF,并且使OF=CF=09/17/2024108举例TESTAL,80H;测试AL中最高位JZNEXT;如果最高位为0,转到标志NEXT处9/17/20241092.移位指令n移位指令对操作数按某种方式左移或右移,当移位位数为1时可以由立即数直接给出,否则由CL间接给出。移位指令分移位指令和循环移位指令9/17/2024110(1)

39、移位指令n移位指令目的操作数DST可以为通用寄存器或存储器操作数图3-14移位指令示意图(a)逻辑和算术左移指令;(b)算术右移指令;(c)逻辑右移指令9/17/2024111算术左移指令SAL(Shiftarithmeticleft)n格式:SALDST,CNTn功能:按照操作数CNT规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0n目的操作数可以为通用寄存器或存储器操作数9/17/2024112逻辑左移指令SHL(Shiftlogicalleft)n格式:SHLDST,CNTn功能:与SAL相同。nSAL,SHL指令影响标志位OF,SF,ZF,PF,CF

40、9/17/2024113举例SHLBYTEPTRDI,1SALBX,CL9/17/2024114算术右移指令SAR(Shiftarithmeticright)n格式:SARDST,CNTn功能:按照操作数CNT规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变,如图3-14(b)所示。目的操作数可以为通用寄存器或存储器操作数9/17/2024115逻辑右移指令SHR(Shiftlogicalright)n格式:SHRDST,CNTn功能:按照操作数CNT规定的移位位数,对目的操作数进行右移操作,最低位移至CF中。每移动一位,左边补一位0n目的操作数可以为通用

41、寄存器或存储器操作数nSAR、SHR指令影响标志位OF,SF,ZF,PF,CF9/17/2024116举例SARBYTEPTRSI,1SHRDX,CL9/17/2024117应用n算术/逻辑左移,只要结果未超出目的操作数所能表达的范围,每左移一次相当于原数乘2n算术右移只要无溢出,每右移一次相当于原数除以29/17/2024118(2)循环移位指令n循环移位指令目的操作数DST可以为通用寄存器或存储器操作数。循环移位指令影响标志位CF,OF。其它标志位无定义图3-15循环移位指令(a)循环左移指令;(b)循环右移指令;(c)带进位循环左移指令;(d)带进位循环右移指令9/17/2024119循

42、环左移指令ROL(Rotateleft)n格式:ROLDST,CNTn功能:循环左移指令ROL,目的操作数左移,每移位一次,其最高位移入最低位,同时最高位也移入进位标志CF9/17/2024120循环右移指令ROR(Rotateright)n格式:RORDST,CNTn功能:循环右移指令ROR,目的操作数右移,每移位一次,其最低位移入最高位,同时最低位也移入进位标志CF9/17/2024121带进位循环左移指令RCL(Rotateleftthroughcarry)n格式:RCLDST,CNTn功能:带进位循环左移指令RCL,目的操作数左移,每移动一次,其最高位移入进位标志CF,CF移入最低位9

43、/17/2024122带进位循环右移指令RCR(Rotaterightthroughcarry)n格式:RCRDST,CNTn功能:目的操作数右移,每移动一次,其最低位移入进位标志CF,CF移入最高位9/17/2024123举例【例3-2】将一个2位数压缩的BCD码转换成二进制数。BCDDB59HBINDB?MOVAL,BCDMOVBL,ALANDBL,0FHANDAL,0F0HMOVCL,4RORAL,CLMOVBH,0AHMULBHADDAL,BLMOVBIN,AL9/17/20241243.3.4控制转移类指令n用于控制程序流程的指令包括转移、循环、过程调用和中断调用9/17/20241

44、251.转移指令n无条件转移指令JMP(Jump)n条件转移指令9/17/2024126(1)无条件转移指令JMP(Jump)n功能是使程序无条件地转移到指令规定的目的地址去执行指令n转移分为短转移、段内转移(近程转移)和段间转移(远程转移)9/17/2024127段内直接转移n格式:JMPSHORTOPR;段内短转移(IP)(IP)+D8JMPNEARPTROPR;段内近程转移(IP)(IP)+D16n功能:采用相对寻址将当前IP值(即JMP指令下一条指令的地址)与JMP指令中给出的偏移量之和送IP中n段内短转移(SHORT)指令偏移量D8为8位,允许转移偏移值的范围为-128+127。段内

45、近程转移(NEAR)指令偏移量D16为16位,允许转移偏移值范围为-215+215-1nOPR为标号或标号加常量表达式9/17/2024128举例JMPSHORTNEXTNEXT:MOVAL,BL为无条件转移到本段内,标号为NEXT的地址去执行指令,汇编程序可以确定目的地址与JMP指令的距离9/17/2024129段内间接转移n格式:JMPREGJMPWORDPTRREGJMPOPR1;OPR1为字变量n功能:段内间接转移,其中JMPREG指令的转移地址在通用寄存器中,将其内容直接送IP实现程序转移。JMPWORDPTRREG指令和JMPOPR1的转移地址在存储器中,默认段寄存器根据参与寻址的

46、通用寄存器来确定,将指定存储单元的字取出直接送IP实现程序转移nJMP指令转移偏移值范围为-215215-19/17/2024130举例设DS=3000H,BX=0100H。JMPBX;(IP)=0100HJMPWORDPTRBX;将地址30000100H单元存放的一个字送IP9/17/2024131段间直接转移n格式:JMPFARPTROPRn功能:段间直接转移,FARPTR说明标号OPR具有远程属性。将指令中由OPR指定的段值送CS,偏移地址送IP。例如:JMPFARPTRNEXT9/17/2024132段间间接转移n格式:JMPDWORDPTRREGJMPOPR1;OPR1为双字变量n功

47、能:段间间接转移,由FARPTRREG和OPR1指定的存储器操作数作为转移地址。存储器操作数为32位,包括16位段地址和16位偏移地址。例如:JMPDWORDPTRBX;数据段双字存储单元低字内容送IP;数据段双字存储单元高字内容送CS9/17/2024133(2)条件转移指令n功能:根据上一条指令对标志寄存器中标志位的影响来决定程序执行的流程,若满足指令规定的条件,则程序转移;否则程序顺序执行n条件转移指令的转移范围为段内短转移,即(IP)(IP)+D8转移量为8位。段内转移偏移值范围为-128+127n条件转移指令包括四类:单标志位条件转移指令;无符号数比较条件转移指令;带符号数比较条件转

48、移指令;测试CX条件转移指令nOPR:标号或标号加常量表达式9/17/20241341)单标志位条件转移指令JZ(或JE)(Jumpifzero,orequal);结果为零(或相等)则转移n格式:JE(或JZ)OPRn测试条件:ZF=19/17/2024135JNZ(或JNE)(Jumpifnotzero,ornotequal);结果不为零(或不相等)则转移n格式:JNZ(或JNE)OPRn测试条件:ZF=09/17/2024136JS(Jumpifsign);结果为负则转移n格式:JSOPRn测试条件:SF=19/17/2024137JNS(Jumpifnotsign);结果为正则转移n格式

49、:JNSOPRn测试条件:SF=09/17/2024138JO(Jumpifoverflow);溢出则转移n格式:JOOPRn测试条件:OF=19/17/2024139JNO(Jumpifnotoverflow);不溢出则转移n格式:JNOOPRn测试条件:OF=09/17/2024140JP(或JPE)(Jumpifparity,orparityeven);奇偶位为1则转移n格式:JPOPRn测试条件:PF=19/17/2024141JNP(或JPO)(Jumpifnotparity,orparityodd);奇偶位为0则转移n格式:JNP(或JPO)OPRn测试条件:PF=09/17/20

50、24142JC(Jumpifcarry);进位位为1则转移n格式:JCOPRn测试条件:CF=19/17/2024143JNC(Jumpifnotcarry);进位位为0则转移n格式:JNCOPRn测试条件:CF=09/17/20241442)无符号数比较条件转移指令9/17/2024145JB(或JNAE)(Jumpifbelow,ornotaboveorequal);低于或不高于或不等于则转移n格式:JB(或JNAE)OPRn测试条件:CF=19/17/2024146JNB(或JAE)(Jumpifnotbelow,oraboveorequal);不低于或者高于或者等于则转移n格式:JNB

51、(或JAE)OPRn测试条件:CF=09/17/2024147JBE(或JNA)(Jumpifbeloworequal,ornotabove);低于或等于,或不高于则转移n格式:JBE(或JNA)OPRn测试条件:CFVZF=19/17/2024148JNBE(或JA)(Jumpifnotbeloworequal,orabove);不低于或不等于,或者高于则转移n格式:JNBE(或JA)OPRn测试条件:CFVZF=09/17/20241493)带符号数比较条件转移指令9/17/2024150JL(或JNGE)(Jumpifless,ornotgreaterorequal);小于或者不大于或者

52、不等于则转移n格式:JL(或JNGE)OPRn测试条件:SFOF=19/17/2024151JNL(或JGE)(Jumpifnotless,orgreaterorequal);不小于或者大于或者等于则转移n格式:JNL(或JGE)OPRn测试条件:SFOF=09/17/2024152JLE(或JNG)(Jumpiflessorequal,ornotgreater);小于或等于或者不大于则转移n格式:JLE(或JNG)OPRn测试条件:(SFOF)VZF=19/17/2024153JNLE(或JG)(Jumpifnotlessorequal,orgreater);不小于或不等于或者大于则转移n格

53、式:JNLE(或JG)OPRn测试条件:(SFOF)VZF=09/17/20241544)测试CX的条件转移指令nJCXZ(JumpifCXregisteriszero);CX寄存器的内容为零则转移n格式:JCXZOPRn测试条件:(CX)=09/17/2024155举例【例3-3】符号函数假设x为某值且存放在寄存器AL中,试编程将求出的函数值f(x)存放在AH中。CMPAL,0JGENEXTMOVAL,0FFHJMPDONENEXT:JEDONEMOVAL,1DONE:MOVAH,AL9/17/20241562.循环控制指令n用CX计数器中的内容控制循环次数,先将循环计数值存放在CX中,每循

54、环一次CX内容减1,直到CX为0时循环结束n循环控制指令的转移范围为段内短转移,即(IP)(IP)+D8转移量为8位。段内转移偏移值范围为-128+127nOPR:标号或标号加常量表达式9/17/2024157(1)LOOP循环指令n格式:LOOPOPRn测试条件:(CX)(CX)-1,若(CX)0,则转到指令中指定的标号OPR处;否则,顺序执行下一条指令9/17/2024158(2)LOOPZ/LOOPE(LOOPifequal,orzero);当为零或相等时循环指令n格式:LOOPZ(或LOOPE)OPRn测试条件:(CX)(CX)-1,若(CX)0且ZF=1,则转到指令中指定的标号OPR

55、处;否则,顺序执行下一条指令9/17/2024159(3)LOOPNZ/LOOPNE(LOOPifnotequal,ornotzero);当不为零或不相等时循环指令n格式:LOOPNZ(或LOOPNE)OPRn测试条件:(CX)(CX)-1,若(CX)0且ZF=0,则转到指令中指定的标号OPR处;否则,顺序执行下一条指令9/17/2024160举例【例3-4】找出以ARRAY为首地址的100个字节数组中的第一个非0值,送AL寄存器中。ARRAYDB100DUP(?)MOVCX,64HLEABX,ARRAYNEXT:CMPBYTEPTRBX,0JNZNOT-ZEROINCBXLOOPNEXTNO

56、T-ZERO:MOVAL,BX9/17/20241613.过程调用指令n如果有一些程序段需要在不同的地方多次反复地出现,则可以将这些程序段设计成为过程(相当于子程序),每次需要时进行调用。过程结束后,再返回原来调用的地方n被调用的过程可以在本段内(近过程),也可在其他段(远过程)n调用的过程地址可以用直接的方式给出,也可用间接的方式给出9/17/2024162(1)调用指令CALL(CALLprocedure)n段内直接调用n段内间接调用n段间直接调用n段间间接调用9/17/2024163段内直接调用n格式:CALLNEARPTROPR;(SP)(SP)2,(SP)+1:(SP)(IP),(I

57、P)(IP)+D16n功能:CALL指令在执行时会先将CALL指令的下面一条指令的IP地址压入堆栈保护起来,这个地址称为返回地址。采用相对寻址将当前IP值(即CALL指令下一条指令的地址)与CALL指令中给出的偏移量之和送IP中n指令偏移量D16为16位,允许调用偏移值范围为-215+215-1nOPR:标号或标号加常量表达式9/17/2024164段内间接调用n格式:CALLREG;(SP)(SP)2,(SP)+1:(SP)(IP),(IP)(REG)CALLWORDPTRREGCALLOPR1;(SP)(SP)2,(SP)+1:(SP)(IP),(IP)(OPR1)n功能:CALL指令在执

58、行时会先将CALL指令的下面一条指令的IP地址压入堆栈保护起来,然后CALLREG指令的调用地址在通用寄存器中,将其内容直接送IP实现程序转移nCALLWORDPTRREG指令和CALLOPR1的调用地址在存储器中,默认段寄存器根据参与寻址的通用寄存器来确定,将指定存储单元的字取出直接送IP实现程序转移nCALL指令调用偏移值范围为-215+215-1nOPR1:字变量9/17/2024165段间直接调用n格式:CALLFARPTROPR;(SP)(SP)2,(SP)+1:(SP)(CS)(CS)SEGOPR(SP)(SP)2,(SP)+1:(SP)(IP)(IP)OFFSETOPRn功能:F

59、ARPTR说明标号OPR具有段间(远程)属性。CALL指令在执行时会先将CALL指令的下面一条指令的CS和IP地址压入堆栈保护起来,然后将指令中由OPR指定的段值送CS,偏移地址送IP9/17/2024166段间间接调用n格式:CALLDWORDPTRREGCALLOPR1;(SP)(SP)2,(SP)+1:(SP)(CS),(CS)(OPR1+2)(SP)(SP)2,(SP)+1:(SP)(IP),(IP)(OPR1)n功能:CALL指令在执行时会先将CALL指令的下面一条指令的CS和IP地址压入堆栈保护起来,然后由DWORDPTRREG和OPR1指定的存储器操作数作为调用地址n存储器操作数

60、为32位,包括16位段地址和16位偏移地址nOPR1:双字变量9/17/2024167(2)过程返回指令RET(RETurnfromprocedure)n格式:从近过程返回:RET;(IP)(SP)+1:(SP),(SP)(SP)+2从远过程返回:RET;(IP)(SP)+1:(SP),(SP)(SP)+2(CS)(SP)+1:(SP),(SP)(SP)+2n功能:过程体中一般总是包含返回指令RET,它将堆栈中的断点弹出,控制程序返回到原来调用过程的地方nRET指令的类型是隐含的,它自动与过程定义时的类型匹配,如为近过程,返回时将栈顶的字弹出到IP寄存器;如为远过程,返回时先从栈顶弹出一个字到

61、IP,接着再弹出一个字到CS9/17/2024168返回指令RETnnN:一个范围为00FFFFH中的任一偶数,表示堆栈所占字节数n表示从堆栈顶弹出返回地址后,再使(SP)(SP)+n9/17/20241694.中断调用指令n8086/8088CPU可以在程序中安排一条中断指令来引起一个中断过程,这就是中断指令INTn和中断返回指令IRET,这种中断称为软件中断9/17/2024170(1)INT指令n格式:INTnn功能:产生中断类型码为n的软中断,该指令包含中断操作码和中断类型码两部分,中断类型码n为8位,取值范围为0255(00HFFH)9/17/2024171执行的操作n将标志寄存器P

62、SW压入堆栈,(SP)(SP)-2,(SP)+1,(SP)(PSW);n清除PSW中的TF和IF标志位;n将当前CS和IP压入堆栈,(SP)(SP)-2,(SP)+1,(SP)(CS);(SP)(SP)-2,(SP)+1,(SP)(IP);n实模式下,n4获取中断矢量表地址指针,(IP)(n4),(CS)(n4+2);保护模式下,n8获取中断描述符表地址指针;n根据地址指针,从中断矢量表或中断描述符表中取出中断服务程序地址送IP和CS中,控制程序转移去执行中断服务程序。9/17/2024172(2)若溢出则中断n格式:INTOn执行的操作:若OF=1则:将标志寄存器PSW压入堆栈,(SP)(S

63、P)-2,(SP)+1,(SP)(PSW);清除PSW中的TF和IF标志位;将当前CS和IP压入堆栈,(SP)(SP)-2,(SP)+1,(SP)(CS);(SP)(SP)-2,(SP)+1,(SP)(IP);实模式下,n4=44=16(10H)获取中断矢量表地址指针,(IP)(0010H),(CS)(0000H);保护模式下,n8获取中断描述符表地址指针;根据地址指针,从中断矢量表或中断描述符表中取出中断服务程序地址送IP和CS中,控制程序转移去执行中断服务程序。9/17/2024173(3)从中断返回指令IRETn格式:IRETn功能:该指令实现在中断服务程序结束后,返回到主程序中断断点处

64、,继续执行主程序n执行的操作:IRET指令弹出堆栈中数据送IP、CS和PSW。(IP)(SP)+1,(SP),(SP)(SP)+2;(CS)(SP)+1,(SP),(SP)(SP)+2;(PSW)(SP)+1,(SP),(SP)(SP)+29/17/20241743.3.5串操作指令n串操作是指连续存放在存储器中的一些数据字节或字。串操作指令允许程序对连续存放大的数据块进行操作n串操作指令通常以DS:SI作为寻址源串,以ES:DI作为寻址目的串。SI、DI这两个地址指针在每次串操作后,都自动进行修改,以指向串中下一个串元素n地址指针修改是增量还是减量由方向标志DF来规定。当DF=0,SI和DI

65、的修改为增量;当DF=1,SI和DI的修改为减量n需要连续进行串操作,通常加重复前缀。重复前缀可以和任何串操作指令组合,形成复合指令9/17/20241751.重复前缀指令助记符判断条件说明REP(CX)0(CX)(CX)-1,若(CX)0则重复REPE/Z(CX) 0且ZF=1(CX)(CX)-1,若(CX)0且ZF=1则重复REPNE/NZ(CX) 0且ZF=0(CX)(CX)-1,若(CX)0且ZF=0则重复9/17/2024176(1)REP重复串操作直到(CX)=0为止n格式:REPstringprimitive其中StringPrimitive可为MOVS或STOS指令n执行的操作

66、:如(CX)=0则退出REP,否则往下执行;(CX)(CX)-1;执行其中的串操作重复9/17/2024177(2)REPE/REPZ当相等/为零时重复串操作n格式:REPE(或REPZ)StringPrimitive其中StringPrimitive可为CMPS或SCAS指令n执行的操作:如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行;(CX)(CX)-1;执行其后的串指令;重复9/17/2024178(3)REPNE/REPNZ当不相等/不为零时重复串操作n格式:REPNE(或REPNZ)StringPrimitive其中StringPrimitive可为C

67、MPS或SCAS指令n执行的操作:如(CX)=0或ZF=1(即某次比较的结果两个操作数相等)时退出,否则往下执行;(CX)(CX)-1;执行其后的串指令;重复。9/17/20241792.方向标志指令n格式:CLD;(DF)0STD;(DF)1n功能:CLD为清除方向标志,即将DF置0。STD为设置方向标志,即将DF置19/17/20241803.与REP相配合工作的MOVS或STOS指令(1)串传送指令MOVSn格式:REPMOVSDST,SRCREPMOVSBREPMOVSWn执行的操作:(ES:DI)(DS:SI)字节操作:(SI)(SI)1,(DI)(DI)1当方向标志DF=0时+1,

68、当方向标志DF=1时-1.字操作:(SI)(SI)2,(DI)(DI)2当方向标志DF=0时+2,当方向标志DF=1时-2。n功能:将DS:SI规定的源串元素复制到ES:DI规定的目的串单元中n指令不影响标志位n加重复前缀REP,可以实现连续存放的数据块的传送,直到(CX)=0为止9/17/2024181举例STRING1DB1,2,3,(100个字节)STRING2DB100DUP(?)MOVAX,SEGSTRING1MOVDS,AXMOVES,AXMOVCX,100LEASI,STRING1LEADI,STRING2CLDREPMOVSBn程序将起始地址为STRING1的100个字节内容传

69、送到起始地址为STRING2的存储单元9/17/2024182(2)串存储指令STOSn格式:REPSTOSDSTREPSTOSBREPSTOSWn执行的操作:字节操作:(ES:DI)(AL),(DI)(DI)1字操作:(ES:DI)(AX),(DI)(DI)2n功能:将寄存器AL或AX中值存入ES:DI所指的目的串存储单元中,每传递一次,都按DF值以及串元素类型自动修改地址指针DIn加重复前缀REP,则表示将累加器的值连续送目的串存储单元,直到(CX)=0时为止n指令不影响标志位9/17/2024183(3)串装入指令LODSn格式:LODSSRCLODSBLODSWn执行的操作:字节操作:

70、(AL)(DS:SI),(SI)(SI)1字操作:(AX)(DS:SI),(SI)(SI)2n功能:将DS:SI所指的源串元素装入寄存器AL或AX中,每装入一次都按照DF值以及串元素类型自动修改地址指针SIn指令一般不须加重复前缀,并且不影响标志位9/17/20241844.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS或SCAS指令(1)串比较指令CMPSn格式:REPE/ZREPNZ/NECMPSDST,SRCREPE/ZREPNZ/NECMPSBREPE/ZREPNZ/NECMPSWn执行的操作:(DS:SI)-(ES:DI)影响标志位字节操作:(SI)(SI)1,(DI

71、)(DI)1字操作:(SI)(SI)2,(DI)(DI)2n功能:由DS:SI规定的源串元素减去ES:DI指出的目的串元素,结果不回送,仅影响标志位CF,AF,PF,OF,ZF,SFn当源串元素与目的串元素值相同时,ZF=1;否则ZF=0n每执行一次串比较指令,根据DF的值和串元素数据类型自动修改SI和DI9/17/2024185举例例如:编程实现两个串元素比较,如相同则将全“1”送BH,否则全“0”送BH。STRING1DB5DUP(?)STRING2DB5DUP(?)MOVAX,SEGSTRING1MOVDS,AXMOVES,AXMOVCX,5LEASI,STRING1LEADI,STRI

72、NG2CLDREPECMPSBJEEQULMOVBH,0JMPDONEEQUL:MOVBH,0FFHDONE:9/17/2024186(2)串扫描指令SCASn格式:REPE/ZREPNE/NZSCASDSTREPE/ZREPNE/NZSCASBREPE/ZREPNE/NZSCASWn执行的操作:字节操作:(AL)-(ES:DI),(DI)(DI)1字操作:(AX)(ES:DI),(DI)(DI)2n功能:由AL或AX的内容减去ES:DI规定的目的串元素,结果不回送,仅影响标志位CF,AF,PF,SF,OF,ZFn当AL或AX的值与目的串元素值相同时,ZF=1;否则ZF=0n每执行一次串扫描指

73、令,根据DF的值和串元素数据类型自动修改DI9/17/2024187举例例如:在内存STRING开始的n个单元寻找字符A,如找到字符A置BH为0FFH,并将A的偏移地址送DI,否则置BH为0。STRINGDBnDUP(?)MOVAX,SEGSTRINGMOVES,AXLEADI,STRINGMOVCX,nMOVAL,ACLDREPNESCASBJEEQULMOVBH,0JMPDONEEQUL:DECDIMOVBH,0FFHDONE:9/17/20241883.3.6处理器控制指令1.标志处理指令nCLC(ClearCarryFlag)进位位置0指令CF=0;nCMC(ComplementCar

74、ryFlag)进位位求反指令CF=;nSTC(SetCarryFlag)进位位置1指令CF=1;nCLD(ClearDirectionFlag)方向标志置0指令DF=0;nSTD(SetDirectionFlag)方向标志置1指令DF=1;nCLI(ClearInterruptFlag)中断标志置0指令IF=0;nSTI(SetInterruptFlag)中断标志置1指令IF=1。9/17/20241892.空操作指令NOP(NoOpreation)nCPU执行该指令时不完成任何具体功能也不影响标志位,只占用机器的3个时钟周期9/17/20241903.处理器暂停指令HLT(Halt)指令使C

75、PU进入暂停状态。只有当下面三种情况之一发生时,CPU才退出暂停状态:nCPU的复位输入端RESET线上有复位信号;n非屏蔽中断请求输入端NMI线上出现请求信号;n可屏蔽中断输入端INTR线上出现了请求信号且标志寄存器的中断标志IF=1。9/17/20241914.等待指令WAIT(Wait)nCPU执行该指令时,测试CPU的引线。当线为高电平时,CPU进入等待状态,且每隔5个时钟周期对的状态进行一次测试,直到引线出现低电平时,CPU退出等待,顺序执行下一条指令9/17/20241925.总线封锁指令LOCK(Lock)n是一条前缀指令,可放在任可指令的前面,使得相应指令执行时,总线被锁定,使别的主设备不能使用总线n指令不影响标志位9/17/20241936.处理器交权指令ESC(Escape)n指令格式:ESCDATA,SRCn功能:主要用于CPU与外部处理器(如协处理器8087)配合工作nSRC将指出送给协处理器的操作数。DATA是一个事先规定的6位立即数,执行ESC指令时,利用这6位数控制外部处理器完成预定操作9/17/2024194

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

最新文档


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

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