微原-第3章3.ppt
- 文档编号:18913684
- 上传时间:2024-02-11
- 格式:PPT
- 页数:65
- 大小:409.50KB
微原-第3章3.ppt
《微原-第3章3.ppt》由会员分享,可在线阅读,更多相关《微原-第3章3.ppt(65页珍藏版)》请在冰点文库上搜索。
本教案内容本教案内容第第3章章8086CPU指令系统指令系统1.汇编语言指令汇编语言指令2.8086指令分类指令分类3.数据与转移地址的数据与转移地址的寻址方式寻址方式4.数据传送类指令数据传送类指令5.算术运算类指令算术运算类指令6.逻辑运算类指令逻辑运算类指令7.移位类指令移位类指令8.标志位操作指令标志位操作指令9.转移指令转移指令10.循环控制指令循环控制指令11.子程序调用返回子程序调用返回指令指令12.中断调用返回指中断调用返回指令令13.字符串操作指令字符串操作指令14.I/O输入输出指令输入输出指令15.其它指令其它指令16.宏指令宏指令3.43.4数据传送类指令数据传送类指令数据传送类指令可以完成数据在寄存器、存储单元数据传送类指令可以完成数据在寄存器、存储单元之间的传递。
这一类的指令有:
之间的传递。
这一类的指令有:
MOVMOV、LEALEA、LDSLDS、LESLES、LAHFLAHF、SAHFSAHF、XCHGXCHG、XLATXLAT、PUSHPUSH、POPPOP、PUSHFPUSHF和和POPFPOPF,其共同点有:
,其共同点有:
除指令除指令SAHFSAHF、POPFPOPF之外,其它指令不影响之外,其它指令不影响PSWPSW(微处理器状态字)中的各标志位;(微处理器状态字)中的各标志位;当指令中有两个操作数时,第一个操作数为目的当指令中有两个操作数时,第一个操作数为目的操作数,第二个为源操作数;操作数,第二个为源操作数;目的操作数的寻址方式一定不能为立即数和段寄目的操作数的寻址方式一定不能为立即数和段寄存器存器CSCS。
3.43.4数据传送类指令数据传送类指令这些指令又可以分成七个子类:
这些指令又可以分成七个子类:
1.1.通用传送指令(通用传送指令(MOVMOV)3.43.4数据传送类指令数据传送类指令格式:
格式:
MOVDST,SRCMOVDST,SRC;(DST)(SRC)(DST)(SRC)说明:
将说明:
将SRCSRC(源操作数)中的一个字节或一(源操作数)中的一个字节或一个字传送到个字传送到DSTDST(目的操作数)所指定的位置。
(目的操作数)所指定的位置。
MOVMOV指令可以在立即数、存储单元、寄存器和指令可以在立即数、存储单元、寄存器和段寄存器之间传送数据,其传送路径如图段寄存器之间传送数据,其传送路径如图3.33.3所示。
所示。
立即数立即数寄存器寄存器AXAXBXBXCXCXDXDXSISIDIDISPSPBPBP存存储储单单元元段寄存器段寄存器DSDS,ESES,SSSSCSCS立即数立即数通用寄存器或存储单元通用寄存器或存储单元例例1:
1:
MOVAX,1234HMOVAX,1234H;将将1234H1234H传送到传送到AXAX中中1234H1234HAX?
123412343.43.4数据传送类指令数据传送类指令立即数立即数通用寄存器或存储单元通用寄存器或存储单元例例2:
2:
MOVvar1,1234HMOVvar1,1234H;将将1234H1234H传送到变量传送到变量var1var1中中1234H1234H?
DS:
var1DS:
var134H34H12H12H3.43.4数据传送类指令数据传送类指令通用寄存器通用寄存器存储单元存储单元例例3:
3:
MOVvar1,DXMOVvar1,DX;将将DXDX的内容传送到变量的内容传送到变量var1var1中中DX55AAH55AAH?
DS:
var1DS:
var1AAHAAH55H55H3.43.4数据传送类指令数据传送类指令存储单元存储单元通用寄存器通用寄存器例例4:
4:
MOVDX,var2MOVDX,var2;将变量将变量var2var2的内容传送到的内容传送到DXDX中中DX1234H1234H?
DS:
var2DS:
var234H34H12H12H3.43.4数据传送类指令数据传送类指令通用寄存器通用寄存器通用寄存器通用寄存器例例55MOVAX,BXMOVAX,BX;将将BXBX的内容传送的内容传送到到AXAX中中AX?
BX78AD78AD78AD78AD3.43.4数据传送类指令数据传送类指令通用寄存器通用寄存器段寄存器段寄存器例例66MOVDS,AXMOVDS,AXMOVBX,ESMOVBX,ESDS?
AX1234123412341234BX?
ESAA55AA55AA55AA553.43.4数据传送类指令数据传送类指令通用寄存器通用寄存器段寄存器段寄存器例例77MOVDX,CSMOVDX,CSCS12341234DX?
123412343.43.4数据传送类指令数据传送类指令段寄存器段寄存器存储单元存储单元例例88MOVDS,var1MOVDS,var1DS?
1234123434341212DS:
var1DS:
var13.43.4数据传送类指令数据传送类指令?
DS:
var2DS:
var2段寄存器段寄存器存储单元存储单元例例99MOVvar2,ESMOVvar2,ESES55AA55AAAAHAAH55H55H3.43.4数据传送类指令数据传送类指令?
DS:
var2DS:
var2段寄存器段寄存器存储单元存储单元例例1010MOVvar2,CSMOVvar2,CSCS55AA55AAAAHAAH55H55H3.43.4数据传送类指令数据传送类指令3.43.4数据传送类指令数据传送类指令从图从图3.33.3中,还应该特别注意中,还应该特别注意MOVMOV指令不能直指令不能直达的路径:
达的路径:
n立即数立即数段寄存器段寄存器n存储单元存储单元存储单元存储单元n段寄存器段寄存器段寄存器段寄存器3.43.4数据传送类指令数据传送类指令如果要完成数据在这些路径上的传送,则如果要完成数据在这些路径上的传送,则应该分两步操作。
应该分两步操作。
立即数立即数段寄存器段寄存器一般可以通过立即数一般可以通过立即数通用寄存器通用寄存器段寄段寄存器来完成,例如:
存器来完成,例如:
MOVAX,3A01HMOVAX,3A01HMOVDS,AXMOVDS,AX;(DS)3A01H(DS)3A01H3.43.4数据传送类指令数据传送类指令存储单元存储单元存储单元存储单元一般可以通过存储单元一般可以通过存储单元通用寄存器通用寄存器存储单存储单元来完成,例如:
元来完成,例如:
MOVAXMOVAX,VAR1VAR1MOVDIMOVDI1010,AXAX;(;(DIDI)1010)VAR1VAR13.43.4数据传送类指令数据传送类指令段寄存器段寄存器段寄存器段寄存器一般可以通过段寄存器一般可以通过段寄存器通用寄存器通用寄存器段寄段寄存器来完成,例如:
存器来完成,例如:
MOVAX,CSMOVAX,CSMOVDS,AXMOVDS,AX;(DS)(CS)(DS)(CS)应该注意:
应该注意:
CSCS不能作为目的寄存器。
不能作为目的寄存器。
例如,下面指令书写是正确的。
例如,下面指令书写是正确的。
MOVAX,BXMOVAX,BX;将将BXBX中的一个字传中的一个字传送到送到AXAX中中MOVAL,DLMOVAL,DL;将将DLDL中的一个字节中的一个字节传送到传送到ALAL中中MOVAX,02MOVAX,02;将将立即数立即数0202传送到传送到;AXAX中中MOVSI,BXMOVSI,BX;(SISI)(BX)(BX)3.43.4数据传送类指令数据传送类指令MOVAL,4DIMOVAL,4DI;将将(DI)+4(DI)+4作为偏移地址,作为偏移地址,;将该单元内容送入将该单元内容送入ALALMOVAX,BX+2MOVAX,BX+2;将将寄存器寄存器BXBX中的内容加中的内容加;2;2后的值作为偏移地址,后的值作为偏移地址,;将该单元中的一个字节将该单元中的一个字节;送入送入ALAL中,下一单元中中,下一单元中;的一个字节送的一个字节送AHAH中中3.43.4数据传送类指令数据传送类指令MOVBXDI,DXMOVBXDI,DX;(BX)+(DI)(BX)+(DI)(DLDL);(BX)+(DI(BX)+(DI)+1+1)(DHDH)3.43.4数据传送类指令数据传送类指令当程序中采用伪指令定义了一组变量当程序中采用伪指令定义了一组变量后,那么,传送指令也可以有下面的形式:
后,那么,传送指令也可以有下面的形式:
3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVAX,DATA1MOVAX,DATA1;AX(DATA1);AX(DATA1)指令执行后,指令执行后,(AX)=1234H(AX)=1234H34H34H12H12H78H78H56H56HDATA1DATA1ALALAHAH3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVBX,1122HMOVBX,1122HMOVDATA3,BXMOVDATA3,BX;(DATA3)(BX);(DATA3)(BX)指令执行后,指令执行后,(DATA3)=1122H(DATA3)=1122H3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVDI,2MOVDI,2MOVAL,DATA2DIMOVAL,DATA2DI;AL(DS:
OFFSETDATA2+(DI);AL(DS:
OFFSETDATA2+(DI)指令执行后,指令执行后,(AL)=40H(AL)=40H3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVSI,2MOVSI,2MOVDX,0AABBHMOVDX,0AABBHMOVDATA3SI,DXMOVDATA3SI,DX;(DS:
OFFSETDATA3+(SI)(DX);(DS:
OFFSETDATA3+(SI)(DX)指令执行后,指令执行后,(DS:
OFFSETDATA3+(SI)=0AABBH(DS:
OFFSETDATA3+(SI)=0AABBHDATA3DATA3DLDLDHDH0BBH0BBH0AAH0AAH+1+1+2+23.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVBP,2MOVBP,2MOVAL,DATA2BPMOVAL,DATA2BP;AL(DS:
OFFSETDATA2+(BP);AL(DS:
OFFSETDATA2+(BP)指令执行后,指令执行后,(AL)=40H(AL)=40H3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVCX,LENGTHDATA3MOVCX,LENGTHDATA3;CXLENGTHDATA3;CXLENGTHDATA3指令执行后,指令执行后,(CX)=10(0AH)(CX)=10(0AH)3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVBX,SIZEDATA3MOVBX,SIZEDATA3;(BX)SIZEDATA3;(BX)SIZEDATA3指令执行后,指令执行后,(BX)=20(14H)(BX)=20(14H)3.43.4数据传送类指令数据传送类指令设在数据段(设在数据段(DSDS段)有下面的变量定义:
段)有下面的变量定义:
DATA1DW1234H,5678HDATA1DW1234H,5678HDATA2DB20H,30H,40HDATA2DB20H,30H,40HDATA3DW10DUP(?
)DATA3DW10DUP(?
)则传送指令可以有:
则传送指令可以有:
MOVSI,OFFSETDATA2MOVSI,OFFSETDATA2;(SI)OFFSETDATA2;(SI)OFFSETDATA2指令执行后,指令执行后,(SI)=0004H(SI)=0004H3.43.4数据传送类指令数据传送类指令对于双操作数指令,两个操作数的类型必须匹对于双操作数指令,两个操作数的类型必须匹配:
配:
1.1.两者都指定了类型,则必须一致,否则指令两者都指定了类型,则必须一致,否则指令出错(类型不一致);出错(类型不一致);2.2.两者之一指定了类型,一般指令无错;两者之一指定了类型,一般指令无错;3.3.两者都无类型,则指令出错(类型不定)。
两者都无类型,则指令出错(类型不定)。
3.43.4数据传送类指令数据传送类指令对于操作数的类型,还应该注意:
对于操作数的类型,还应该注意:
1.1.立即数是无类型的;立即数是无类型的;2.2.不含变量名的直接寻址、寄存器间接寻址、不含变量名的直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、基址变址寄存器相对寻址、基址变址寻址、基址变址且相对寻址的操作数也是无类型的;且相对寻址的操作数也是无类型的;3.3.利用利用PTRPTR操作符可指定或暂时改变存储单元操作符可指定或暂时改变存储单元的类型。
的类型。
3.43.4数据传送类指令数据传送类指令应该搞清楚什么样的操作数为立即数。
应该搞清楚什么样的操作数为立即数。
从形式上看,立即数有:
从形式上看,立即数有:
n由常数等组成的表达式由常数等组成的表达式n所有由属性操作符得到的标号或变量的所有由属性操作符得到的标号或变量的属性。
属性。
3.43.4数据传送类指令数据传送类指令例如,下面指令书写是错误的。
例如,下面指令书写是错误的。
(DATA1DATA1为字变量)为字变量)MOV10H,ALMOV10H,ALDSTDST不能为立即数寻址不能为立即数寻址MOVAL,CXMOVAL,CX类型不一致类型不一致MOVBXSI,78HMOVBXSI,78H类型不明确类型不明确3.43.4数据传送类指令数据传送类指令MOVDATA1,AHMOVDATA1,AH类型不一致类型不一致MOVDI+02H,DATA1MOVDI+02H,DATA1两单元之间不两单元之间不能直接传送数据能直接传送数据MOVCS,AXMOVCS,AXCSCS不能做不能做DSTDSTMOVDS,0100HMOVDS,0100H当当DSDS作作DSTDST时,时,SRCSRC不能为立即数不能为立即数3.43.4数据传送类指令数据传送类指令2.2.取有效地址指令(取有效地址指令(LEALEA)LoadEffectiveAddressLoadEffectiveAddress格式格式:
LEAREG,MEMLEAREG,MEM功能功能:
指令的功能是将源操作数:
指令的功能是将源操作数MEMMEM(存储单元)的有效地址(存储单元)的有效地址(偏移地址偏移地址)传送到寄存器传送到寄存器REGREG。
这是一条特殊指令,它传送的不这是一条特殊指令,它传送的不是操作数本身,而是操作数的有是操作数本身,而是操作数的有效地址。
效地址。
注注:
DSTREGDSTREG为通用为通用REGREG,一般用一般用BXBX、BPBP、SISI、DIDI。
3.43.4数据传送类指令数据传送类指令例如:
例如:
LEADI,VAR1LEADI,VAR1;(DI)VAR1(DI)VAR1的偏移地址的偏移地址等效于:
等效于:
MOVDI,OFFSETVAR1MOVDI,OFFSETVAR1LEABXLEABX,VAR1VAR11515;(BX)VAR1(BX)VAR1的偏移地址的偏移地址1515等效于:
等效于:
MOVBX,OFFSETVAR1+25MOVBX,OFFSETVAR1+253.43.4数据传送类指令数据传送类指令3.3.取地址指针指令(取地址指针指令(LDSLDS,LESLES)LoadData/ExtraSegmentRegisterLoadData/ExtraSegmentRegister格式格式:
LDSREG16LDSREG16,MEMMEM;(DS)(MEM+2),(REG16)(MEM)(DS)(MEM+2),(REG16)(MEM)LESREG16LESREG16,MEMMEM;(ES)(MEM+2),(REG16)(MEM)(ES)(MEM+2),(REG16)(MEM)3.43.4数据传送类指令数据传送类指令功能:
功能:
取地址指针指令取地址指针指令LDSLDS可以将双字变量可以将双字变量MEMMEM内容内容中的高中的高1616位送入位送入DSDS,低,低1616位送入指定的位送入指定的REG16REG16中;中;而取地址指针指令而取地址指针指令LESLES可以将双字变量可以将双字变量MEMMEM内内容中的高容中的高1616位送入位送入ESES,低,低1616位送入指定的位送入指定的REG16REG16中。
中。
3.43.4数据传送类指令数据传送类指令例如定义变量:
例如定义变量:
TABLEDB10H,20HTABLEDB10H,20H,POINT1DD02001000HPOINT1DD02001000HPOINT2DDTABLEPOINT2DDTABLE则可以有指令则可以有指令LDSDILDSDI,POINT1POINT1;(DS)0200H(DS)0200H,(DI)1000H(DI)1000HLESSILESSI,POINT2POINT2;(ESES)TABLETABLE的段地址,的段地址,;(SISI)TABLETABLE的偏移地址的偏移地址3.43.4数据传送类指令数据传送类指令4.4.标志传送指令(标志传送指令(LAHFLAHF,SAHFSAHF)LoadAHregisterfromflagsLoadAHregisterfromflagsStoreAHregisterinflagsStoreAHregisterinflags格式:
格式:
LAHFLAHF;(AH)PSW(AH)PSW寄存器的低寄存器的低88位位SAHFSAHF;PSWPSW寄存器的低寄存器的低88位位(AH)(AH)3.43.4数据传送类指令数据传送类指令说明:
说明:
指令指令LAHFLAHF(LoadAHregisterfromLoadAHregisterfromflagsflags)可以将)可以将PSWPSW寄存器中的低寄存器中的低88位传送到位传送到寄存器寄存器AHAH中,而指令中,而指令SAHFSAHF(StoreAHStoreAHregisterinflagsregisterinflags)可以将)可以将AHAH中的内容传中的内容传送到送到PSWPSW寄存器中的低寄存器中的低88位中。
源操作数和目位中。
源操作数和目的操作数的寻址方式均为的操作数的寻址方式均为隐含寻址方式隐含寻址方式。
3.43.4数据传送类指令数据传送类指令5.5.数据交换指令(数据交换指令(XCHGXCHG)格式格式:
XCHGDST,SRCXCHGDST,SRC;DSTSRCDSTSRC功能功能:
该指令是完成寄存器与寄存器或寄存:
该指令是完成寄存器与寄存器或寄存器与存储单元之间内容交换的。
该指令要求器与存储单元之间内容交换的。
该指令要求两个操作数之一必须是寄存器,允许两个操两个操作数之一必须是寄存器,允许两个操作数都是寄存器,但不允许是段寄存器作数都是寄存器,但不允许是段寄存器。
注:
段注:
段REGREG和立即数不能参加交换和立即数不能参加交换。
3.43.4数据传送类指令数据传送类指令例例11合法指令有:
合法指令有:
XCHGAX,BXXCHGAX,BX;(AX)(BX)(AX)(BX)XCHGCX,DIXCHGCX,DI;(CX)(DI)(CX)(DI)XCHGDX,VAR1XCHGDX,VAR1;(DX)(VAR1)(DX)(VAR1)3.43.4数据传送类指令数据传送类指令例例2.2.下面指令书写格式是错误的。
下面指令书写格式是错误的。
XCHGAX,1234HXCHGAX,1234H立即数不能参加交换立即数不能参加交换XCHGBX,ESXCHGBX,ESESES段寄存不能参加交换段寄存不能参加交换XCHGAL,CXXCHGAL,CX类型不一致类型不一致XCHGDAT1,DAT2XCHGDAT1,DAT2两存储器单元不能直接交换两存储器单元不能直接交换3.43.4数据传送类指令数据传送类指令例例3.3.若(若(CXCX)=9A8BH=9A8BH,试将试将CXCX的高的高88位与低位与低88位互相交换。
位互相交换。
XCHGCH,CLXCHGCH,CL指令执行后,(指令执行后,(CXCX)=8B9AH=8B9AH3.43.4数据传送类指令数据传送类指令6.6.字节
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微原-第3章3.ppt