您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术(楼顺天)-第3章3
本教案内容第3章8086CPU指令系统1.汇编语言指令2.8086指令分类3.数据与转移地址的寻址方式4.数据传送类指令5.算术运算类指令6.逻辑运算类指令7.移位类指令8.标志位操作指令9.转移指令10.循环控制指令11.子程序调用返回指令12.中断调用返回指令13.字符串操作指令14.I/O输入输出指令15.其它指令16.宏指令3.4数据传送类指令数据传送类指令可以完成数据在寄存器、存储单元之间的传递。这一类的指令有:MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF和POPF,其共同点有:①除指令SAHF、POPF之外,其它指令不影响PSW(微处理器状态字)中的各标志位;②当指令中有两个操作数时,第一个操作数为目的操作数,第二个为源操作数;③目的操作数的寻址方式一定不能为立即数和段寄存器CS。3.4数据传送类指令这些指令又可以分成七个子类:POPFPUSHFPOPPUSHXLATXCHGSAHFLAHFLESLDSLEAMOV,,,堆栈操作指令字节转换指令数据交换指令,标志传送指令,获取地址指针指令获取有效地址指令通用传送类指令传送类指令1.通用传送指令(MOV)3.4数据传送类指令格式:MOVDST,SRC;(DST)←(SRC)说明:将SRC(源操作数)中的一个字节或一个字传送到DST(目的操作数)所指定的位置。MOV指令可以在立即数、存储单元、寄存器和段寄存器之间传送数据,其传送路径如图3.3所示。立即数寄存器AXAXBXBXCXCXDXDXSISIDIDISPSPBPBP存储单元段寄存器DS,ES,SSCS①立即数→通用寄存器或存储单元例1:MOVAX,1234H;将1234H传送到AX中1234HAX????12343.4数据传送类指令①立即数→通用寄存器或存储单元例2:MOVvar1,1234H;将1234H传送到变量var1中1234H????DS:var134H12H3.4数据传送类指令②通用寄存器→存储单元例3:MOVvar1,DX;将DX的内容传送到变量var1中DX55AAH????DS:var1AAH55H3.4数据传送类指令③存储单元→通用寄存器例4:MOVDX,var2;将变量var2的内容传送到DX中DX1234H????DS:var234H12H3.4数据传送类指令④通用寄存器←→通用寄存器例5MOVAX,BX;将BX的内容传送到AX中AX????BX78AD78AD3.4数据传送类指令⑤通用寄存器←→段寄存器例6MOVDS,AXMOVBX,ESDS????AX12341234BX????ESAA55AA553.4数据传送类指令⑤通用寄存器←→段寄存器例7MOVDX,CSCS1234DX????12343.4数据传送类指令⑥段寄存器←→存储单元例8MOVDS,var1DS????12343412DS:var13.4数据传送类指令????DS:var2⑥段寄存器←→存储单元例9MOVvar2,ESES55AAAAH55H3.4数据传送类指令????DS:var2⑥段寄存器←→存储单元例10MOVvar2,CSCS55AAAAH55H3.4数据传送类指令3.4数据传送类指令从图3.3中,还应该特别注意MOV指令不能直达的路径:立即数×→段寄存器存储单元×→存储单元段寄存器×→段寄存器3.4数据传送类指令如果要完成数据在这些路径上的传送,则应该分两步操作。①立即数→段寄存器一般可以通过立即数→通用寄存器→段寄存器来完成,例如:MOVAX,3A01HMOVDS,AX;(DS)←3A01H3.4数据传送类指令②存储单元→存储单元一般可以通过存储单元→通用寄存器→存储单元来完成,例如:MOVAX,VAR1MOV[DI+10],AX;((DI)+10)←VAR13.4数据传送类指令③段寄存器→段寄存器一般可以通过段寄存器→通用寄存器→段寄存器来完成,例如:MOVAX,CSMOVDS,AX;(DS)←(CS)应该注意:CS不能作为目的寄存器。当程序中采用伪指令定义了一组变量后,那么,传送指令也可以有下面的形式:3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVAX,DATA1;AX(DATA1)∴指令执行后,(AX)=1234H34H12H78H56HDATA1ALAH3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVBX,1122HMOVDATA3,BX;(DATA3)(BX)∴指令执行后,(DATA3)=1122H3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVDI,2MOVAL,DATA2[DI];AL(DS:OFFSETDATA2+(DI))∴指令执行后,(AL)=40H3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVSI,2MOVDX,0AABBHMOVDATA3[SI],DX;(DS:OFFSETDATA3+(SI))(DX)∴指令执行后,(DS:OFFSETDATA3+(SI))=0AABBHDATA3DLDH0BBH0AAH+1+23.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVBP,2MOVAL,DATA2[BP];AL(DS:OFFSETDATA2+(BP))∴指令执行后,(AL)=40H3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVCX,LENGTHDATA3;CXLENGTHDATA3∴指令执行后,(CX)=10(0AH)3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVBX,SIZEDATA3;(BX)SIZEDATA3∴指令执行后,(BX)=20(14H)3.4数据传送类指令设在数据段(DS段)有下面的变量定义:DATA1DW1234H,5678HDATA2DB20H,30H,40HDATA3DW10DUP(?)则传送指令可以有:MOVSI,OFFSETDATA2;(SI)OFFSETDATA2∴指令执行后,(SI)=0004H3.4数据传送类指令对于双操作数指令,两个操作数的类型必须匹配:1.两者都指定了类型,则必须一致,否则指令出错(类型不一致);2.两者之一指定了类型,一般指令无错;3.两者都无类型,则指令出错(类型不定)。3.4数据传送类指令对于操作数的类型,还应该注意:1.立即数是无类型的;2.不含变量名的直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、基址变址且相对寻址的操作数也是无类型的;3.利用PTR操作符可指定或暂时改变存储单元的类型。3.4数据传送类指令例如,下面指令书写是错误的。(DATA1为字变量)MOV10H,ALㄨDST不能为立即数寻址MOVAL,CXㄨ类型不一致MOV[BX][SI],78Hㄨ类型不明确3.4数据传送类指令MOVDATA1,AHㄨ类型不一致MOV[DI]+02H,DATA1ㄨ两单元之间不能直接传送数据MOVCS,AXㄨCS不能做DSTMOVDS,0100Hㄨ当DS作DST时,SRC不能为立即数3.4数据传送类指令2.取有效地址指令(LEA)LoadEffectiveAddress格式:LEAREG,MEM功能:指令的功能是将源操作数MEM(存储单元)的有效地址(偏移地址)传送到寄存器REG。这是一条特殊指令,它传送的不是操作数本身,而是操作数的有效地址。注:DSTREG为通用REG,一般用BX、BP、SI、DI。3.4数据传送类指令例如:LEADI,VAR1;(DI)←VAR1的偏移地址等效于:MOVDI,OFFSETVAR1LEABX,VAR1+15;(BX)←VAR1的偏移地址+15等效于:MOVBX,OFFSETVAR1+253.4数据传送类指令3.取地址指针指令(LDS,LES)LoadData/ExtraSegmentRegister格式:LDSREG16,MEM;(DS)←(MEM+2),(REG16)←(MEM)LESREG16,MEM;(ES)←(MEM+2),(REG16)←(MEM)3.4数据传送类指令功能:取地址指针指令LDS可以将双字变量MEM内容中的高16位送入DS,低16位送入指定的REG16中;而取地址指针指令LES可以将双字变量MEM内容中的高16位送入ES,低16位送入指定的REG16中。3.4数据传送类指令4.标志传送指令(LAHF,SAHF)LoadAHregisterfromflagsStoreAHregisterinflags格式:LAHF;(AH)←PSW寄存器的低8位SAHF;PSW寄存器的低8位←(AH)3.4数据传送类指令说明:指令LAHF(LoadAHregisterfromflags)可以将PSW寄存器中的低8位传送到寄存器AH中,而指令SAHF(StoreAHregisterinflags)可以将AH中的内容传送到PSW寄存器中的低8位中。源操作数和目的操作数的寻址方式均为隐含寻址方式。3.4数据传送类指令5.数据交换指令(XCHG)格式:XCHGDST,SRC;DST←→SRC功能:该指令是完成寄存器与寄存器或寄存器与存储单元之间内容交换的。该指令要求两个操作数之一必须是寄存器,允许两个操作数都是寄存器,但不允许是段寄存器。注:段REG和立即数不能参加交换。3.4数据传送类指令例1合法指令有:XCHGAX,BX;(AX)←→(BX)XCHGCX,[DI];(CX)←→((DI))XCHGDX,VAR1;(DX)←→(VAR1)3.4数据传送类指令例2.下面指令书写格式是错误的。XCHGAX,1234Hㄨ立即数不能参加交换XCHGBX,ESㄨES段寄存不能参加交换XCHGAL,CXㄨ类型不一致XCHGDAT1,DAT2ㄨ两存储器单元不能直接交换3.4数据传送类指令6.字节交换指令(XLAT)Translatebyte格式:XLAT;(AL)←((BX)+(AL))功能:该指令的寻址方式是隐含的,其有效地址EA=(BX)+(AL)。指令的功能是将EA为偏移地址所对应的内存单元中的一个字节的内容送入AL。3.4数据传送类指令指令XLAT非常适合于两个代码之间的转换,例如现要将Code1转换成Code2,如表3.3所示,则分三步完成从Code1转换成Code2:1.在TABLE变量中按Code1的顺序存储Code2的内容,如图3.4所示;2.将BX指向变量TABLE的首地址,即LEABX,TABLE;3.在AL中给出Code1的值后,执行XLAT指令,这时AL的内容即为相应的Code2值。3.4数据传送类指令3.4数据传送类指令Code1Code2012345678150816251121190901TABLE150816251121190901图3.4代码变换表的存储3.4数据传送类指令例如,当AL=0时,则执行XLAT指令后得到AL=15;当AL=1时,则执行XLAT指令后得到AL=8。Code1Code2012345678150816251121
本文标题:微机原理与接口技术(楼顺天)-第3章3
链接地址:https://www.777doc.com/doc-4720493 .html