秦红磊金天第三章微处理器指令系统(InstructionSet)第一节:指令的基本格式第二节:8086的寻址方式第三节:8086的指令系统第四节:其它微处理器的指令扩展第五节:中断指令和DOS系统功能调用指令系统是计算机硬件和软件之间的桥梁,是汇编语言设计的基础。操作码操作数汇编指令:操作码:指令操作类型;操作数:指令所需操作数或操作数的地址;操作数可以有一个,也可以有两个,一个源操作数,一个目的操作数。例:MOVAX,CX;将CX的内容送入AX中。微机算机处理器的指令由几十种或上百种组成,每种指令由两个字段(Field)构成:第一节指令的基本格式第二节8086的寻址方式8086的寻址方式是指寻得操作数来源得方式,有以下几种:1.立即数寻址(ImmediateAddressing)2.寄存器寻址(RegisterAddressing)3.直接寻址(DirectAddressing)4.间接寻址(IndirectAddressing)存储器寻址•由指令字节给出的信息求出操作数的地址称为有效地址—EA(Efficient)•寻找(得到)操作数有效地址的方法称为操作数的寻址方法•寻找(得到)操作数有效地址和存取操作数的过程称为指令的寻址操作指令操作数部分直接给出指令的操作数,操作数与操作码一起存入代码段中。立即数有8位和16位。例:MOVAL,05H;源操作数为立即寻址指令执行后,AL=05H,8位数据05H存入AL寄存器。例:MOVAX,3064H;源操作数为立即寻址指令执行后,AX=3064H,16位数据3064H存入AX寄存器。1.立即数寻址(ImmediateAddressing)立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。寻址方式。其它寻址方式操作数存放在内存中,取完指令后,还需到内存取数,指令中给出的是该操作数的地址,包括段地址和偏移地址。CPU总线内存DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、、、指令1指令2指令3指令4、、、数据1数据2数据3、、、地址总线AB数据总线DB控制总线CB地址译码器寄存器寻址方式的操作数是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:AX、BX、CX、DX可分成两8位使用。例:MOVAX,CX;(AX)(CX)INCCX;(CX)(CX)+12.寄存器寻址(RegisterAddressing)直接寻址方式的操作数的形式为:Variable或[Variable]在直接寻址方式中,操作数的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和标号两种形式)。它存放在代码段中指定操作码之后,但操作数一般存放在存储器的数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。段地址隐含的由DS指定,也可以ES指定,但需在指令中指明。最后存储器地址为:DS:偏移地址或ES:偏移地址。例:MOVAX,ES:[2000H]将ES:2000H单元内容送入AX。例:MOVAX,LABLE或MOVAX,[LABEL]将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。3.直接寻址(DirectAddressing)例:MOVAX,[1000H]若(DS)=2000H内存操作数的物理地址为:PA=(DS)×10H+EA=2000H×10H+1000H=21000H执行后(AX)=3040H210004000A1内存1030指令思考:指令MOVAX,[1000H]与MOVAX,1000H有什么不同?4.间接寻址(IndirectAddressing)▲按给出偏移地址方式的不同,分为以下5种:寄存器间接寻址MOVAL,[BX]寄存器相对寻址MOVAL,[BX+10H]基址加变址寄存器MOVAL,[BX+SI]相对基址加变址寄存器MOVAL,[BX+SI+10H](1)寄存器间接寻址寄存器间接寻址方式的操作数形式为:[reg]操作数的有效地址包含在基址寄存器BX,基址指针BP或一个变址寄存器(SI或DI)中。寄存器间接寻址要用方括号括起来,以便与寄存器操作数相区别。例:MOVAX,[BX];将由BX决定的存储单元的内容送到AX寄存器。0000000100020003CCAATAB:AHALAABB数据段0002BXBB默认段寄存器的关系:①使用BX、SI、DI,默认段寄存器为DS(BX)PA=(DS)×10H+(SI)(DI)②使用BP,默认段寄存器为SSPA=(SS)×10H+(BP)使用BX、SI、DI的寄存器寻址,默认段寄存器为DSCPU总线内存DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、、、指令1指令2指令3指令4、、、数据1数据2数据3、、、地址总线AB数据总线DB控制总线CB地址译码器例:MOVAX,[DI]若(DS)=3000H(DI)=2000H则内存操作数的物理地址为:PA=(DS)×10H+(DI)=32000H执行后(AX)=(32000H)=400BH320000B058B指令40思考:指令MOVAX,[DI]与MOVAX,DI有什么不同?用SI、DI、BX、BP作为间接寻址允许段跨越指令中可以指定段跨越前缀来取得其他段中的数据。例:MOVES:[DI],AXMOVDX,DS:[BP]这种寻址方法可以用于表格处理。(2)寄存器相对寻址方式操作数在存储器内,指令中寄存器内容与指令指定的位移量(DISP)之和作为操作数所在单元的有效地址。(BX)DISP8(SI)(DI)(BP)DISP16有效地址=段寄存器为DS段寄存器为SS+物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16类同。物理地址=(SS)*16+(BP)+DISP16操作数有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和。可用的寄存器有BX、DI、SI、BP,与寄存器间接寻址相同如:MOVAL,[BX+10H]MOVAH,[DI+20H]MOVDL,30H[SI]MOVDH,40H[BP]例:MOVAX,[BX+30H]若(DS)=2000H(BX)=1000H则内存操作数的物理地址为:PA=(DS)×10H+(BX)+30H=21030H指令执行后:(AX)=(21030H)=8976H21030763047指令898B(3)基址变址寻址方式:操作数在存储器中,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)内容之和作为操作数所在存储单元的有效地址。(BX)(SI)(BP)(DI)EA=+PA=(DS)*16+(BX)+(SI)或(DI)PA=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]DS:(BX)+(DI)字存储单元内容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]SS:(BP)+(SI)字存储单元内容送AX。默认段寄存器由基址寄存器决定,允许段跨越。①基址寄存器为BX,默认段寄存器为DS(SI)PA=(DS)×10H+(BX)+(DI)②基址寄存器为BP,默认段寄存器为SS(SI)PA=(SS)×10H+(BP)+(DI)使用BX的基址加变址寻址,默认段寄存器为DSCPU总线内存DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、、、指令1指令2指令3指令4、、、数据1数据2数据3、、、地址总线AB数据总线DB控制总线CB地址译码器例:MOVAX,[BX+SI]若(DS)=4000H(BX)=2000H(SI)=100H则内存操作数的物理地址为:PA=(DS)×10H+(BX)+(SI)=42100H指令执行后(AX)=(42100H)=2345H4210045008B指令23(4)相对基址变址寻址方式操作数在存储器内,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)的内容之和再加上位移量(8位或16位),得到操作数所在单元的有效地址。(BX)(SI)DISP8(BP)(DI)DISP16有效地址=++默认段寄存器由基址寄存器决定,与基址加变址寻址相同.允许段跨越。①基址寄存器为BX,默认段寄存器为DS(SI)PA=(DS)×10H+(BX)++偏移量(DI)②基址寄存器为BP,默认段寄存器为SS(SI)PA=(SS)×10H+(BP)++偏移量(DI)例:MOVAX,[BX+SI+10H]若(DS)=4000H(BX)=3000H(SI)=200H则内存操作数的物理地址为:PA=(DS)×10H+(BX)+(SI)+10H=43210H指令执行后(AX)=(43210H)=8877H43210771040指令888B第三节8086的指令系统8086的指令系统包含133条基本指令,这些指令功能可以分为6类:1.数据传送指令(Datatransfer)2.算术运算指令(Arithmetic)3.逻辑指令与移位指令(Logic&Shift)4.控制转移指令(Controltransfer)5.处理机控制指令(ProcessorControl)6.串操作指令(Stringmanipulation)一.数据传送指令数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中。地址总线AB存储器I/O接口输入设备I/O接口数据总线DB控制总线CB输出设备CPU寄存器,存储器,I/O端口▲按传送内容,可分为四类:1。通用数据传送MOV,PUSH,POP,XCHG2.累加器专用传送IN,OUT,XLAT3.地址传送LEA,LDS,LES4.标志传送PUSHF,POPF,LAHF,SAHF▲特点:1.除POPF、SAHF外,其他传送指令对标志位均无影响2.唯一允许以段寄存器做操作数的指令且只有MOV、PUSH、POP这三条允许1.通用传送指令MOV、PUSH、POP、XCHGreg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data可实现(1)MOV传送指令格式MOVdst,src执行(dst)←(src)例:①reg/mem/segreg←reg通用寄存器/存储器/段寄存器←通用寄存器MOVAL,BLMOV[BX],ALMOVDS,AX②reg/segreg←mem通用寄存器/段寄存器←存储器MOVAL,[BX]MOVDS,[BX+SI]③reg/mem←segreg通用寄存器/存储器←段寄存器MOVBX,CSMOV[BX],DS④reg/mem←data通用寄存器/存储器←立即数MOVAl,9MOVBX,OFFSETbufferMOVBYTEPTR[value],0MOVWORDPTR[BX],1MOV指令特点及注意事项:双操作数指令(注意双操作指令的特点)可进行字节或字传送不允许存储器传送到存储器MOV[BX],[value]MOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL可对DS、ES、SS赋值但不允许立即数直接传送给段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AXCS不能做目的操作数,不能通过传送指令改变CS的值MOVCS,AXMOVAX,CS不允许段寄存器传送到段寄存器MOVES,DSMOVAX,DSMOVES,AXD:\MAS