您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第三章 8086指令系统1
第五讲8086指令系统1Intel8086的寻址方式重点:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、基址加变址寻址,有效地址的计算掌握数据传送类指令的使用方法。1、指令格式指令:计算机提供给用户的硬件命令。指令系统(集):指令的集合。指令的一般格式操作码:指计算机所要执行的操作,即指出操作类型,是一种助记符。操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。寻址方式:就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。2、操作数寻址方式1.立即数寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.寄存器相对寻址6.基址变址寻址7.相对基址变址寻址(1)立即数寻址方式说明:立即数可以是8位或16位的。如果是16位立即数,则高8位放在高地址,低8位放在低地址。使用场合:由于立即数用来表示常数,所以立即数寻址方式经常用于给寄存器赋初值。它只能用于源操作数字段,不能用于目的操作数字段。由于立即数可以从指令中直接取得,因此CPU不需要另外占用总线周期去取操作数,故立即数寻址方式显著的特点就是速度快。(2)寄存器寻址方式源和目的操作数都在寄存器中例:MOVDS,AXMOVCL,AL对于16位操作数,可以用字寄存器,比如:AX、BX、CX、DX、SI、DI、SP、BP以及段寄存器;对于8位操作数,可以用字节寄存器,比如:AH、BH、CH、DH、AL、BL、CL、DL;这种寻址方式因为操作数在寄存器中,不需要访问存储器,所以运算速度较高。(3)直接寻址在指令中直接给出有效地址,它可能是一个数值地址,也可能是符号地址(变量名)。操作数一般存放在数据段中,因此计算物理地址就应该把DS的值作为段基址即:物理地址=16×(DS)+EAMOVAL,[2000H];[DS*10H+2000H]送AL;MOVAX,[2000H];[DS*10H+2000H]送AL,DS*10H+2000H+1]送AH;MOVAL,ES:[2000H];这里ES是段超越前缀,所以源操作数是在ES*10H+2000H的内存单元中。MOV[3000H],AL;目的操作数采用直接寻址,将AL送[DS*10H+3000H]的内存单元。(4)寄存器间接寻址方式操作数的偏移地址(有效地址EA)放在寄存器中只有SI、DI、BX和BP可作间址寄存器例:MOVAX,[BX]MOVCL,CS:[DI]若选择BX或SI或DI寄存器提供的间址,则操作数一般在数据段区域中,用DS提供段基址。若选择BP寄存器提供的间址,则操作数在堆栈段区域中,用SS提供段基址。用SI、DI、BX、BP作为间接寻址时允许使用段跨越前缀,从而实现对其它段中数据的存取。用途:这种寻址方法适用于数组、字符串、表格的处理。(5)寄存器相对寻址(6)基址+变址寻址例:MOVAX,[BX][SI](DS)=3200H,(BX)=0456H(SI)=1094HEA=0456H+1094H=14EAH物理地址=32000H+14EAH=334EAH若选择BP寄存器提供基地址,则操作数在堆栈段区域中,用SS提供段基址(7)相对基址+变址寻址8086/8088指令系统8086/8088的指令系统可以分为以下六个功能组。1、数据传送(DataTransfer)2、算术运算(Arithmetic)3、逻辑运算(Logic)4、串操作(Stringmenipulation)5、程序控制(ProgramControl)6、处理器控制(ProcessorControl)一、数据传送指令主要MOV,XCHG、堆栈和地址传送指令。1、数据传送MOV指令一般格式:MOVOPRD1,OPRD2MOV是操作码,OPRD1目的操作数、OPRD2源操作数。功能:完成数据传送具体来说,一条数据传送指令能实现:⑴CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。MOVAL,BL;字节传送MOVCX,BX;字传送MOVDS,BX⑵立即数传送至CPU内部的通用寄存器组(即AX、BX、CX、DX、BP、SP、SI、DI),MOVCL,4MOVAX,03FFHMOVSI,057BH⑶CPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送。MOVAL,BUFFERMOVAX,[SI]MOV[DI],CXMOVSI,BLOCK[BP]MOVDS,DATA[SI+BX]MOVDEST[BP+DI],ES⑷能实现用立即数给存储单元赋值例:MOV[2000H],25H注意:①存储器传送指令中,不允许对CS和IP进行操作;②两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个存储器操作数之间不允许直接进行信息传送;如需要把存储单元AREA1的内容送至同一段内AREA2中去,传送过程如下:MOVAL,AREA1MOVAREA2,AL③两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOVAX,0;MOVDS,AX④目的操作数,不能用立即寻址方式。2、堆栈指令入栈(PUSH)、出栈(POP)仅能进行字传送。⑴入栈指令PUSH一般格式:PUSHOPRD例如:PUSHBX执行过程为:SP=SP-1,[SP]=BH;SP=SP-1,[SP]=BL⑵出栈指令POP一般格式:POPOPRD功能:将数据弹出堆栈对指令执行的要求同入栈指令。例如:POPAXPOP[BX]POPDS4、累加器专用传送指令⑴IN指令一般格式:INAL,n;BAL←[n]INAX,n;WAX←[n+1][n]INAL,DX;BAL←[DX]INAX,DX;WAX←[DX+1][DX]功能:从I/O端口输入数据至AL或AX。若端口地址超过255时,须用DX作端口寻址,最多可寻找64K个端口。⑵OUT指令一般格式:OUTn,AL;BAL→[n]OUTn,AX;WAX→[n+1][n]OUTDX,AL;BAL→[DX]OUTDX,AX;WAX→[DX+1][DX]功能:将AL或AX的内容输出至I/O端口。该指令将AL或AX中的内容传送到一个输出端口。⑶XLAT指令一般格式:XLAT;(AL)=(DS)×16+((BX)+(AL))功能:完成一个字节的查表转换。寄存器AL的内容作为一个表的下标;表的基地址放在BX中;转换后的结果存放在AL中.例如:MOVBX,OFFSETTABLEINAL,1XLAT;查表OUT1,AL;(AL)=AAH本指令可用在数制转换、函数表查表、代码转换等场合。5、地址传送指令⑴LEA(LoadEffectiveAddress)一般格式:LEAOPRD1,OPRD2功能:把源操作数OPRD2的地址偏移量传送至目的操作数OPRD1。要求:①源操作数必须是一个内存操作数②目的操作数必须是一个16位的通用寄存器。例:LEABX,BUFR;把变量BUFR的地址偏移量送BX⑵LDS(LoadpointerintoDS)一般格式:LDSOPRD1,OPRD2功能:完成地址指针的传送。将段地址送DS,偏移量部分送入一个16位的指针寄存器或变址寄存器。要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器/变址寄存器。例如:LDSSI,[BX];把BX所指的32位地址指针的段地址送DS,偏移量送SI。⑶LES(LoadpointerintoES)一般格式:LESOPRD1,OPRD2这条指令除将地址指针的段地址部分送入ES外,与LDS类似例:LESDI,[BX+COUNT]6、标志寄存器传送⑴LAHF(LOADAHWITHFLAG)将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位⑵SAHF(STOREAHWITHFLAG)将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位⑶PUSHF(PUSHFLAG)将标志寄存器压入堆栈,不影响标志位。⑷POPF(POPFLAG)将栈顶的一个字,送标志寄存器,影响标志位。习题:设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(AX)=1200H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103)=78H,(21200)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H。说明下列各条指令的寻址方式,单独执行后相关寄存器或存储单元的内容(1)MOVAX,1800H(2)MOVAX,BX(3)MOVBX,[1200H](4)MOVDX,1100[BX](5)MOV[BX][SI],AL(6)MOVAX,1100[BX][SI]
本文标题:第三章 8086指令系统1
链接地址:https://www.777doc.com/doc-3358746 .html