您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章8086CPU指令系统
第三章8086CPU指令系统本章重点:1.寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。2.8086指令系统:数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。学习目标:1.掌握寻址方式;2.掌握常用指令的功能和用法。难点:区别指令的正确与错误。§1.寻址方式指令在存储器中是顺序存放的,而操作数的存放没有规律,因此操作数的寻址方法相对比较复杂。一、指令的基本格式1.组成:一条指令包括操作码和操作数两部分。操作数:源操作数,目标操作数。2.寻址方式:寻找指令中操作数的方法。3.操作数类型:(8086系统)寄存器操作数,存储器操作数,立即数(在指令代码中)和I/O端口操作数。二、寻址方式1.立即数寻址⑴方式:指令中所需的操作数直接包含在指令代码中(即由指令直接提供),立即数可以是8位,也可以是16位。例:MOVAL,80H;将十六进制数80H送入ALMOVAX,1090H;将1090H送AX:90H→AL,10H→AH⑵说明:采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以从指令中直接取得,不需要运行总线周期,所以,其显著特点就是速度快。规定:立即数只能是整数,不能是小数,变量或者其他类型的数据;另外,立即数只能作为源操作数。2.寄存器寻址⑴方式:如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出,这种寻址方式就叫寄存器寻址。对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或BP,而对8位操作数来说寄存器可以为AH……DH,AL……DL。例:INCCX;将CX内容加1ROLAH,1;将AH中的内容循环左移1位。⑵说明:不需要使用总线周期,因此,执行速度快。一条指令中,可以对源操作数采用寄存器寻址方式,也可对目的操作数采用寄存器寻址方式,或两者都用。※以下各种寻址方式,操作数都在存储器中。3.直接寻址。⑴方式:数据总是在存储器中,存储单元的有效地址由指令直接指出。例:MOVAX,[1070H];将DS段的偏移量1070H、1071H的内容装入AX。即,若DS=2000H,则将21070H和21071H两单元的内容取出送AX。⑵说明:直接寻址是对存储器进行访问时可采用的最简单的方式,且可用符号地址代替数值地址。若要对其它段寄存器所指出的存储区进行直接寻址,则必须指出段寄存器名。例:MOVBX,CS:[3000H];设CS=5100H,则取54000H和54001H两单元内容送BX。4.寄存器间接寻址⑴方式:将操作数所在的存储单元的偏移地址放在指令给出的寄存器中,而不像直接寻址那样直接给出。例:MOVAX,[SI];AX←DS:[SI]MOV[BX],AX;DS:[BX]←AX⑵说明:可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。SI,DI,BX约定的段寄存器是DS;而BP约定的段寄存器是SS。5.基址寻址:⑴方式:操作数的有效地址偏移量是基址寄存器BX或基址指针BP的内容与指令给定的位移量(8位或16位)之和。例:MOVAX,ARRAY[BX]等价MOVAX,[ARRAY+BX]将DS:[BX]+ARRAY的内容→AX⑵说明:BX约定的段寄存器为DS,BP约定SS,可使用段跨越前缀。物理地址=16×(DS)+(BX)+位移量(8或16位)或16×(SS)+(BP)+位移量(8或16位)6.变址寻址操作数的有效地址是变址寄存器SI、DI的内容与指令给定的位移量(8位或16位)之和。段寄存器约定在DS中,允许段超越。例:MOV[DI+12H],AX;DS:[DI+12H]←AXMOVBX,SS:[DI+45H];BX←SS:[DI+45H]7.基址变址寻址。⑴方式:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和。段寄存器约定由基址寄存器决定,BX约定DS,BP约定SS,允许段超越。例:MOVAX,ARRAY[BX][SI];等价MOVAX,[BX+SI+ARRAY];即:AX←DS:[BX+SI+ARRAY]⑵说明:基址寄存器BX,BP不能同时出现在一个方括号内;变址寄存器SI,DI亦如此。8.串操作寻址方式:用于串操作指令,其操作数虽然也在寄存器中,但不使用上述寻址方式,而是隐含地运用,SI指出源串偏移地址,DI指出目的串偏移地址。指令执行后,SI和DI的内容根据方向标志DF的值进行增减,DF=0增,DF=1减。若串操作按字节进行,增/减“1”;若串操作按字进行,增/减“2”。约定源串段地址在DS中,目的串段地址在ES中,不允许段超越。即SI→DSDI→ES例:MOVSB;字节传送:ES:[DI]←DS:[SI]。传送完后,SI±1,DI±1。9.I/O端口寻址:操作数在外设端口中。⑴直接端口寻址:指令中直接给出的8位常数是外设端口地址。(0~255)例:INAL,34H;AL←[34H]OUT34H,AL;[34H]←AL⑵间接端口寻址:指令中外设端口的16位地址在DX中。例:MOVDX,280HINAX,DX;AX←[280H]§2指令系统目前在微机上常见的汇编语言是MASM(MacroAssemblerLanguage宏汇编语言),因此我们以8086/8088MASM为主要介绍内容,也涉及一些MASM5.0,MASM6.0等版本内容。OPR指令助记符SRC源操作数DEST目的操作数零操作数在指令中隐含指明了操作数所处的地方。一、传送类指令1.数据传送指令(MOVE)⑴格式:MOVDEST,SRC(不区分大小写)⑵功能:可以进行字节数据传递,也可以进行字数据传送。但SRC和DEST的长度必须一致,不能一个是字节数据,而另一个是字数据。⑶举例:①CPU通用寄存器之间传递MOVCL,AL;8bitMOVSI,AX;16bit②通用寄存器与段寄存器之间传递。MOVDS,AX;AX中16位→DSMOVAX,ES;ES→AX③通用寄存器与存储单元之间MOVAL,[BX];DS数据段(BX)所指存储单元内容→ALMOV[DI],AX;AX中16位数据→DS:(DI)(DI)+1MOV[2000H],CX;CX中16位→DS:(2000H)(2001H)④段寄存器和存储单元之间MOVDS,[2000H];DS:[2000H][2001H]→DSMOV[BX][SI],CS;CS→DS:[BX]+(SI)(BX)+(SI)+1⑤立即数到通用寄存器。MOVSP,2000H;2000H→SP⑥立即数到存储单元。MOVWORDPTR[SI],4501H;4501H→DS:(SI)(SI)+1*PTR汇编操作符与WORD一起表示字操作,因为4501H类型不确定。BYTEPTR限定字节。⑷说明:MOV指令数据传送方向如下图所示:①除源操作数SRC是立即数的情况外,MOV指令中DST和SRC必须要用到一个寄存器,不允许用MOV在两个存储单元之间传送数据。若需要时,可借助一通用寄存器为桥梁,即:MOVAL,[SI]MOV[DI],AL②不能用CS和IP作目的操作数,即这两个数的内容不能随便改变。③不允许在段寄存器之间直接传送数据。④不允许用立即数作目的操作数。⑤不能向段寄存器送立即数,因此,对段寄存器初始化赋值时,要通过通用寄存器。MOVAX,DATAMOVDS,AX2.交换指令(Exchange)⑴格式:XCHGDST,SRC⑵功能:源操作数和目的操作数两者的内容相互交换。存储器通用寄存器AXBXCXDXBPSPSIDI立即数CS段寄存器DSESSS⑶举例;XCHGBX,[BP][SI]设指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,SRC物理地址=2F000+0200+0046=2F246则:(BX)=4154,(2F246H)=6F30H⑷说明:①两个操作数必须有一个在寄存器中。即可以在寄存器之间或寄存器与存储器之间交换信息。②不允许使用段寄存器。③允许字或字节操作,且不影响标志位。3.堆栈操作指令(PUSH/POP)堆栈是以“后进先出”的原则暂存一批需要保护的数据或地址的一个特定存储区。堆栈段段地址由SS提供,偏移地址由SP提供,SP始终指向栈顶。堆栈操作有压栈(PUSH)和出栈(POP)两种,均以字为单位。压栈过程:例PUSHAX①SP←SP-1②(SP)←AH③SP←SP-1④(SP)←AL出栈过程:例POPBX①BL←(SP)②SP←SP+1③BH←(SP)④SP←SP+14.标志位传送指令。对标志位寄存器进行操作有4条指令,都是零操作数。⑴取标志寄存器指令(LoadregisterAHfromFlag)格式:LAHF功能:把标志寄存器的低8位传送给AH寄存器,即把SF,ZF,AF,PF和CF标志位分别送至AH的第7、6、4、2、0位,AH的第5、3、1位是任意的,指令对标志寄存器的各位无影响。⑵存储标志寄存器(storeregisterAHintoFlag)格式:SAHF功能:把寄存器AH中的第7、6、4、2、0位的内容送至FR的SF、ZF、AF、PF、CF标志位,而FR的OF、DF、IF、TF各位不受影响。⑶标志位进栈(PushFlag)格式:PUSHF功能:将FR压入堆栈。该指令首先把堆栈指针SP减2,然后将16位标志寄存的全部内容送入SP指向的堆栈顶部字单元中。FR中各标志位本身不受影响。进栈步骤:SP←SP-1;(SP)←(FR)HSP←SP-1;(SP)←(FR)L※堆栈采用“后进先出”原则。⑷标志位出栈(POPFlag)格式:POPF功能:将堆栈顶部的内容弹入标志寄存器。该指令首先根据SP找到堆栈顶部,并将堆栈顶部的一个字的内容送入FR,然后SP加2。FR中各标志位的状态,由从堆栈中弹出内容的相应位决定。出栈步骤:(FR)L←(SP);SP←SP+1(FR)H←(SP);SP←SP+1;PSHF和POPF一般用在子程序和中断处理程序的首尾,起保存和恢复主程序标志的作用。FR中CF、DF、IF有专门指令进行修改,其余标志位都没有指令对它们直接进行设置或修改。若要修改这些位,可首先用LAHF把含SF的FR低8位送入AH,对AH相应位进行修改,然后用SAHF送回FR。对TF位修改可先用PSHF将FR压入堆栈,在堆栈中设置TF,然后用POPF返回。5.地址传送指令。该指令传送的是存储单元的地址,而不是它的内容。⑴装入有效地址(Loadeffectiveaddress):①格式:LEADST,SRC②功能:将源操作数的有效地址(即偏移量EA)送到指定的寄存器。③举例:LEABX,0F62H[BX][SI]若指令执行前:(BX)=0400H,(SI)=003CH则指令执行后:(BX)=0400+003C+0F62=139EH④说明:目的操作数一定是16位的通用寄存器;此指令对FR各位无影响。▲存放一个存储单元逻辑地址的地址指针需要4个byte,其中高16位(两个高字节)用来存放基址,低16位(两个低字节)用来存放偏移量。⑵LDS(LoadDSwithPointer)指针送寄存器和DS:①格式:LDSDST,SRC②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。③举例:LDSSI,[10H]若指令执行前:(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H,则指令执行后:(SI)=0180H,(DS)=2000H⑶LES(LoadESWithPointer)指针送寄存器和ES①格式:LESDST,SRC②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI。二、算术运算类指令。1.加法指令(Addition)⑴格式:ADDDEST,SRC⑵功能:目的操作数和源操作
本文标题:第三章8086CPU指令系统
链接地址:https://www.777doc.com/doc-2212099 .html