您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 8086指令系统简介
8086指令系统简介徐承彬一、8086的指令格式和寻址方式汇编语言指令要解决的两个问题:要指出进行什么操作——操作符;要指出操作数和操作数地址及操作结果放在何处——寻址方式。操作码(OP)操作数(EA)(一)、指令格式1、零地址指令格式2、一地址指令格式操作码(OP)OPEA操作码操作数3、二地址指令格式OPEA1EA2操作码第一操作数(目的操作数)第二操作数(源的操作数)二、8086的寻址方式操作数有三种可能存放方式(二)、8086的寻址方式操作数有三种可能存放方式操作数在指令中操作数在CPU内部某一寄存器中操作数在内存的存储单元中1、立即数寻址操作数就在指令中提供,叫立即数寻址方式。例:MOVAL,15H立即寻址该指令是把立即数15H送寄存器AL,指令执行后(AL)=15H例如:MOVAX,7632H例如:MOVwordptr[BX],20H2、寄存器寻址操作数在CPU内部的寄存器中,指令中指定寄存器号例:MOVDI,AXAXDI执行前(AX)=1234H,(DI)=0018H1234H0018H1234H执行后(AX)=1234H,(DI)=1234H寄存器寻址INCCX;将CX的内容加1ROLAH,1;将AH中的内容循环左移一位CXAH3、存储器寻址:操作数或地址在存储器中存储器寻址直接寻址间接寻址相对寻址基址变址寻址相对基址变址寻址(1)直接寻址操作数的16位有效地址在指令中物理地址=(DS)×16+EA例:MOVAX,[205AH]M......代码段数据段设(DS)=3000HOP5A203000205A物理地址=3205A1234指令执行后(AX)=3412H数据段首地址=30000注:在汇编语言中有时用符号地址作为有效地址。例如:MOVAX,ARRY也可写成MOVAX,[ARRY]在8086中允许段超越,即允许数据放在数据段以外的其他段中,指令中需加段跨越前缀。例如:MOVAX,ES:[2000H]符号地址注:对于双操作数指令,必须有一个操作数在寄存器中(2)间接寻址:操作数的有效地址在寄存器BX,BP或变址寄存器SI,DI中操作数物理地址=(DS)×16+(BX)(DS)×16+(SI)(DS)×16+(DI)(SS)×16+(BP)例如:MOVAX,[BX]例如:MOVAL,[BX]例如:MOVAX,[SI]例如:MOVAL,[DI]例如:MOV[SI],BX例如:MOV[BP],AX寄存器间接寻址寄存器寻址(3)相对寻址:操作数的有效地址由基址寄存器BX,BP或变址寄存器SI,DI之一中的内容加上指令中指定的8位或16位位移量组成。操作数物理地址=(DS)×16+(BX)+8位或16位位移量(DS)×16+(SI)+8位或16位位移量(DS)×16+(DI)+8位或16位位移量(SS)×16+(BP)+8位或16位位移量例:MOVAX,COUNT[SI]M......代码段数据段设(DS)=3000H,(SI)=0110HOP100030000110+0010=0120物理地址=30120H1234指令执行后(AX)=3412H数据段首地址=30000例如:MOVAX,20H[BX]相对寻址例如:MOVAX,BUF[SI](4)基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)之和。操作数物理地址=(DS)×16+(BX)+(SI)(DS)×16+(BX)+(DI)(SS)×16+(BP)+(SI)(SS)×16+(BP)+(DI)例如:MOVAX,[BX][SI]基址变址寻址例如:MOVAL,[BX][DI]例如:MOVAX,[BP][SI](5)相对基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)与一个8位或16位位移量之和。操作数物理地址=(DS)×16+(BX)+(SI)+8位或16位位移量(DS)×16+(BX)+(DI)+8位或16位位移量(SS)×16+(BP)+(SI)+8位或16位位移量(SS)×16+(BP)+(DI)+8位或16位位移量例如:MOVAX,10H[BX][SI]相对基址变址寻址例如:MOVAL,BUF[BX][DI]例如:MOVAX,MASK[BX][DI]设(DS)=2000H,(SS)=3000H(BX)=1100H,(DI)=0010H,(SI)=0030HMASK=0203H,(21313H)=1234H(31313H)=2356H,(21333H)=0056H则:操作数的物理地址=21313H执行后(AX)=1234H指出下列指令中源操作数和目的操作数的寻址方式1.MOVAX,1002.MOV[SI],AX3.MOVCX,DATX[SI]4.ADDAX,[BX][DI]5.ANDAX,BX6.MOVAX,TAX[BX][SI]7.SUBAX,[2500H]二、8086的指令系统(一)、指令书写格式:[标号]:助记符[目的操作数],[源操作数];[注释](二)、8086的指令系统数据传送指令算术运算指令逻辑操作指令串操作指令控制转移指令处理机控制指令1、数据传送:负责把数据、地址或立即数送到寄存器或存储单元中。•分•类通用传送指令累加器专用传送指令地址传送指令标志传送指令(1)通用传送指令①最基本的传送指令(MOV)格式:MOVOPRD1,OPRD2;B/WOPRD1:累加器、寄存器、存储器OPRD2:累加器、寄存器、存储器操作数和立即数目的操作数源操作数传送路径段寄存器DS、SS、ES存储器立即数通用寄存器AX、BXCX、DXBP、SPSI、DIMOV指令的几种形式MOV[BX],AXMOVALPHA,AXMOVALPHA,AHMOVAH,ES:[BX][SI]MOVAL,[BP]MOVAX,ARRAYMOVES,DXMOVDS,AXMOVES,SS:[BX]MOVBX,DXMOVBL,AX(错误指令)MOVMEM,DXMOVCH,8AHMOVDL,‘B’MOV[BX],12H②堆栈操作指令堆栈是在存储器中开辟的一个栈区。工作方式:“后进先出”的方式进行8086的堆栈是从高地址向低地址方向生长的堆栈操作:入栈指令PUSH出栈指令POP在CALL指令、RET指令、中断响应和返回中都有入栈和出栈的操作。PUSH入栈指令格式:PUSHSRC;W字操作执行的操作(SP-1)(SP-2)(SRC)SP(SP-2);先修改后操作SRC是入栈的字操作数[寄存器、段寄存器(不包含CS)、和存储器]例如:PUSHAX设执行前(SP)=2500H,SS=5000H,(AX)=3125HSS=5000H堆栈段SP=2500H3125AX31SP=24FEH25栈顶单元物理地址=52500例如:PUSHBETA[BX][SI]设DS=2000H,BX=2100H,SI=2520H,BETA=03404H,SS=5000H,SP=2500H操作数的物理地址PA=20000+2100+2520+0340=24960(524FE)(24960)(24961)(524FF)POP出栈指令格式:POPDST;W字操作执行的操作(DST)(SP+1,SP)SP(SP+2);先操作后修改DST是出栈的字操作数的目的地址(寄存器、段寄存器、和存储器)例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H1000SP例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFESP34H12H执行后1:AX=1234HBX=2345HSP=0FFEH例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后2:AX=1234HBX=2345HSP=0FFCH0FFCSP45H23H例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后3:AX=2345HBX=2345HSP=0FFCH0FFC45H23HSP0FFE例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后3:AX=2345HBX=2345HSP=0FFEH0FFC45H23HSP0FFE③交换指令:XCHG格式:XCHGOPRD1,OPRD2;B/w执行的操作:(OPRD1)(OPRD2)例如:XCHGAX,BX执行前:AX=420AH,BX=7955H执行后:AX=7955H,BX=420AH例如:XCHGDX,[BP][SI](2)累加器专用传送指令①IN输入指令固定端口输入数据格式:INAL/AX,Port;Port为端口号功能:从固定端口Port传送一个字节或一个字数据到AL或AX寄存器8086规定,从固定端口输入数据,端口号的范围为:00H~FFH可变端口输入数据格式:INAL/AX,DX;功能:从DX寄存器所存放的端口地址中送一个字节或一个字数据到AL或AX寄存器8086规定:外设最多可以有65536个I/O端口,端口号范围为0000H~FFFFH。其中低256个端口为固定端口,指令中可以直接指定。当端口号≥256时必须先把端口号放在DX中然后才使用IN指令,他们称为可变端口OUT指令输出指令格式:OUTPort,AL/AXOUTDX,AL/AX例如:INAX,21HINAL,DXOUT25H,AXOUTDX,AX(3)地址-目的传送指令:把地址送到指定的寄存器中①LEA指令:有效地址送寄存器指令格式LEAREG,SRC功能把REGEASRC注:SRC只能是各种寻址方式的存储器操作数REG只能是16位的通用寄存器例如:LEACX,[BX][DI]执行前(BX)=1000H,(DI)=0250H操作数的有效地址EA=1000H+0250=1250H执行后(CX)=1250HCX的内容是存储单元的有效地址而非存储单元的内容例:LEADX,BATE[BX]执行前(BX)=1248H,BETA=0020H该指令执行后(DX)=1268H2、算术运算指令:用来执行算术运算(1)加法指令:ADDADCINCADD:加法指令格式:ADDOPRD1,OPRD2操作:OPRD1OPRD1+OPRD2结果影响标志位AF,CF,OF,PF,SF,ZF例如:ADDAX,[SI]例如:ADDAL,BH(1)加法指令:ADDADCINCADC:带进位的加法指令格式:ADCOPRD1,OPRD2操作:OPRD1OPRD1+OPRD2+CF结果影响标志位AF,CF,OF,PF,SF,ZF例如:在存储区中有两个双字数据,分别存放在FIRST和SECOND单元中(四个字节)将两个数相加后结果放在THIRD单元中7856239110331AB6FIRST33105678SECONDB61A9123THIRD相关程序如下:MOVAX,FIRST33105678B61A9123E92AFIRSTSECONDADDAX,SECONDTHIRDMOVTHIRD,AXMOVAX,FIRST+2ADCAX,SECOND+2MOVTHIRD+2,AX(1)加法指令:ADDADCINCINC:加1指令格式:INCOPRD操作:OPRDOPRD+1结果影响标志位AF,OF,PF,SF,ZF例:INCAL例:INCCX例:INCwordPTR[BX][DI](2)减法指令:SUBSBBDECCMPSUB:减法指令格式:SUBOPRD1,OPRD2操作:OPRD1OPRD1-OPRD2结果影响标志位AF,CF,OF,PF,SF,ZF(2)减法指令:SUBSBBDECCMPSBB:带借位减法指令格式:SBBOPR
本文标题:8086指令系统简介
链接地址:https://www.777doc.com/doc-3261450 .html