教案用纸第三章吉林化工学院第1页第三章8086CPU指令系统一8086指令的一般格式⒈概述①指令:是计算机用以控制各部件协调动作的命令;②指令系统:CPU可执行的指令的集合;③机器指令:是CPU仅能识别的指令的二进制代码,也称机器码;⒉指令格式①组成由操作码和操作数两部分组成,有些指令无操作数。操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。②分类指令可分为无操作数指令、单操作数指令、双操作数指令。例:HLT无操作数DAA约定或隐含操作数INCAL单操作数MOVAL,BL双操作数,其中逗号前的操作数AL为目的操作数,逗号后的操作数BL为源操作数。③操作数类型立即数:出现在指令中的常数;寄存器操作数:操作数在寄存器中;存储器操作数:操作数在存储器中。④一般格式[标号:]操作码操作数;注释二8086寻址方式是指CPU在执行指令时寻找操作数或操作数地址的方式。⒈立即寻址直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。例:MOVAL,50H⒉寄存器寻址存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。例:MOVAL,BL以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名PTR偏移地址的形式说明指令中存储器操作数的类型,例:WORDPTR[1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUFDB10H,20H。⒊存储器寻址①直接寻址教案用纸第三章吉林化工学院第2页存储器操作数的16位偏移地址直接包含在指令的方括号中。例:MOVAL,[1000H]约定由DS提供段地址MOVAL,CS:[1000H];段超越,由CS提供段地址MOVAL,SS:[1000H];段超越,由SS提供段地址②寄存器间接寻址操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。例:MOVAX,[SI];AX←DS:[SI]MOV[BX],AX;DS:[BX]←AX③基址寻址操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。例:MOVAX,[BX+3AH];AX←DS:[BX+3AH]MOV[BP+4EB3H],AX;SS:[BP+4EB3H]←AX④变址寻址操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。例:MOV[DI+12H],AX;DS:[DI+12H]←AXMOVBX,SS:[DI+45H];BX←SS:[DI+45H]⑤基址变址寻址操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。例:MOVBX,[DI+BP+45H];BX←SS:[DI+BP+45H]MOVAX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H]注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。⑥串寻址用于数据串操作指令,它隐含地运用:SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);约定源串段地址在DS中,目的串段地址在ES中。不允许段超越。例:MOVSB;ES:[DI]←DS:[SI],SI←SI1,DI←DI1MOVSW;ES:[DI]←DS:[SI],SI←SI2,DI←DI2⑦端口寻址操作数在外设端口中。●直接端口寻址:指令中直接给出的8位常数是外设端口地址。例:INAL,34H;AL←[34H]OUT34H,AL;[34H]←AL●间接端口寻址:指令中外设端口的16位地址在DX中。例:MOVDX,280HINAL,DX;AL←[280H]OUTDX,AL;[280H]←AL⑧隐含寻址指令中没有给出操作数,但却隐含在固定对象中。教案用纸第三章吉林化工学院第3页例:AAA;隐含对AL操作,三数据传送指令⒈通用数据传送指令①MOVdst,src指令功能:dst←src,标志寄存器:不影响,操作数:src:通用寄存器、段寄存器、存储器操作数、立即数;dst:通用寄存器、段寄存器、存储器操作数。注意:src和dst必须类型一致(都是8位或者是16位);dst不能是立即数;当操作数不是立即数时,两个操作数不能都是存储器操作数;源操作数是立即数时,目的操作数不能是段寄存器;CS不得作目的操作数。例:MOVBX,CX;BX←CXMOV[2000H],BL;DS:[2000H]←BL②XCHGdst,src指令功能:dst←→src标志寄存器:不影响,操作数:两操作数可以是通用寄存器和存储器。注意:两操作数不能都是存储器操作数;两操作数类型必须一致。例:XCHGAX,BX;AX←→BX③PUSHsrc指令功能:SP←SP-1,[SP]←srcH,SP←SP-1,[SP]←srcL标志寄存器:不影响操作数:寄存器(IP除外)或存储单元。注意:源操作数只能是16位,而不能是8位的。④POPdst指令功能:dstL←[SP],SP←SP+1,dstH←[SP],SP←SP+1标志寄存器:不影响,POPF除外操作数:同PUSH指令,但CS不能作为目的操作数。注意:目的操作数只能是16位的,而不能是8位的。⑤XLAT(查表指令)教案用纸第三章吉林化工学院第4页指令功能:AL←DS:[BX+AL];标志寄存器:不影响;用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。⒉地址传送指令用来传送操作数的地址。①LEAreg16,src取偏移地址指令指令功能:将源操作数的偏移地址送16位通用寄存器;标志寄存器:不影响;操作数:目的操作数是16位通用寄存器,源操作数是存储器操作数。②LDSreg16,src和LESreg16,src取地址指针指令指令功能:将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES指令送入ES),低16位内容送入指令指定的16位通用寄存器;标志寄存器:不影响。例:设某双字存储单元偏移地址为3000H,双字数据为12345678H,则LDSSI,[3000H];DS=1234H,SI=5678HLESDI,[3000H];ES=1234H,DI=5678H⒊标志传送指令专门用于对标志寄存器进行操作①LAHF;AH←FL,标志寄存器低8位送AH②SAHF;FL←AH,AH的内容送标志寄存器低8位③PUSHF;标志寄存器内容压栈④POPF;栈顶内容送标志寄存器注意:SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。⒋输入/输出指令用于主机与外设端口间的数据传送。INAL,n;INAL,DX;INAX,n;INAX,DX指令功能:从端口(地址为n或在DX中)输入8位数据到AL中或输入16位数据到AX中;标志寄存器:不影响。OUTn,AL;OUTDX,AL;OUTn,AX;OUTDX,AX指令功能:从AL中输出8位数据到端口(地址为n或在DX中)或从AX中输出16位数据到端口(地址为n或在DX中)。标志寄存器:不影响。四算术运算指令⒈加法指令①ADDdst,src指令功能:dst←(src)+(dst)标志寄存器:影响AF、CF、PF、OF、ZF、SF操作数:目的操作数:通用寄存器、存储器;源操作数:通用寄存器、存储器、立即数;注意:两操作数必须类型一致;两操作数不能同时为存储器操作数。例:ADDAX,BX;AX←AX+BX教案用纸第三章吉林化工学院第5页ADD[BX+DI+64H],AX;[BX+DI+64H]←AX②ADCdst,src指令功能:dst←(dst)+(src)+CF其余同ADD指令。③INCdst指令功能:dst←(dst)+1标志寄存器:影响OF、SF、ZF、AF、PF;操作数:8位/16位通用寄存器或存储器;注意点:不影响CF。⒉减法指令①SUBdst,src指令功能:dst←(dst)-(src);其余同ADD指令。例:SUBBX,CX;BX←BX-CX②SBBdst,src指令功能:dst←(dst)-(src)-CF;其余同SUB指令。例:SBB[BX+SI],AL;[BX+SI]←[BX+SI]-AL-CF③DECdst指令功能:dst←(dst)-1其余同INC指令。④NEGdst指令功能:dst←0-(dst)或det←+1标志寄存器:影响AF、CF、PF、OF、ZF、SF;操作数:8位/16位通用寄存器或存储器。例:MOVAH,5NEGAH;AH=11111011B,是-5(补码)MOVAX,-6NEGAX;AX=0006H,是+6⑤CMPdst,src指令功能:(dst)-(src)其余同SUB指令;注意:指令执行后,目的操作数保持原值不变。3.乘法指令①MULsrc无符号数乘法指令指令功能:AX←AL*(src)(字节乘法)DXAX←AX*(src)(字乘法)标志寄存器:字节乘:若乘积高8位AH0,则CF=1,OF=1,若乘积高8位AH=0,则CF=0,OF=0;字乘:若乘积高16位DX0,则CF=1,OF=1,若乘积高16位DX=0,则CF=0,OF=0;操作数:可以是通用寄存器、存储器,不能是立即数。例:MULBX;DXAX←AX*BX教案用纸第三章吉林化工学院第6页MULBYTEPTR[SI];AX←AL*(DS:[SI])②IMULsrc带符号数乘法指令指令功能:同MUL指令;标志寄存器:若乘法结果AH或DX包含有效值,则OF=1、CF=1,若乘法结果AH或DX只是低半部分的符号扩展,则OF=0、CF=0操作数:同MUL指令。例:IMULWORDPTR[DI];DXAX←AX*(DS:[DI])⒋除法指令①DIVsrc无符号除法指令指令功能:字节除:AL←AX/(src),余数在AH中,字除:AX←DXAX/(src),余数在DX中。若商超过AL(字节除)或AX(字除)所能存放的最大值(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。操作数的规定与乘法指令相同。例:DIVBX;DX,AX←DXAX/BX,DX←余数,AX←商②IDIVsrc带符号数除法指令需强调的是余数的符号必须和被除数的符号相同。当商超过AL或AX所能存放的最大值+127(字节除)或+32767(字除),以及所能存放的最小值-127(字节除)或-32767(字除)时,系统会自动产生0类中断。操作数的规定与乘法指令相同。⒌符号扩展指令扩展带符号数的字节数①CBW指令功能:将AL中数的符号位扩展到整个AH中。②CWD指令功能:将AX中数的符号位扩展到整个DX中。例:MOVAL,-16;AL=0F0H(-16)CBW;AX=0FFF0H(-16)CWD;DXAX=0FFFFFFF0H(-16)IDIVBX;DX←余数,AX←商⒍BCD数调整指令压缩型BCD数(也称组合BCD数):一个字节表示两位BCD数;非压缩型BCD数(也称非组合BCD数):一个字节表示一位BCD数,有效位在低4位,高4位为零。①加法的BCD数调整a.AAA:加法的非压缩型BCD数调整指令指令功能:对在AL中两个非压缩型BCD数相加的结果,调整成非压缩型BCD数在AL中;若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0;否则AL高4位清0,CF和AF置0,标志寄存器:该指令不影响PF、ZF、SF、OF,只影响AF、CF。注意:必须紧跟在加法指令之