微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt
《微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt》由会员分享,可在线阅读,更多相关《微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt(211页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.1寻址方式寻址方式3.2指令系统指令系统3.380386/80486指令系统指令系统第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.1寻址方式寻址方式3.1.1操作数的寻址方式8086/8088指令中说明操作数所在地址的寻址方式有以下8种。1.立即寻址立即寻址方式所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.1立即寻址第第3章章80X86指令系统及汇编语言指令系统及汇编
2、语言2.直接寻址直接寻址是指操作数地址的16位段内偏移地址直接包含在指令中,它与操作码一起存放在代码段区域。操作数一般在数据段区域中,它的地址为数据段寄存器CS加上这16位的段内偏移地址。例:MOVAX,DS:其过程如图3.2所示。指令中的16位段内偏移地址的低字节在前,高字节在后。第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.寄存器寻址寄存器寻址是指操作数包含在CPU的内部寄存器中,例如AX、BX、CX、DX、SI、BP、AL、CH等。例:MOVDS,AX其过程如图3.3所示。寄存器可以是16位寄存器,也可以是8位寄存器。
3、图3.3寄存器寻址第第3章章80X86指令系统及汇编语言指令系统及汇编语言4.寄存器间接寻址在寄存器间接寻址方式中,操作数存放在存贮器中,操作数的16位段内偏移地址放在SI、DI、BP、BX这4个寄存器中之一。由于上述4个寄存器所默认的段寄存器不同,这样又可以分成两种情况:若以SI、DI、BX进行间接寻址,则操作数通常存放在现行数据段中。若以寄存器BP间接寻址,则操作数存放在堆栈段区域中。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:MOVAX,SI其过程如图3.4(a)所示。例:MOVAX,BP其过程如图3.4(b)所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言
4、第第3章章80X86指令系统及汇编语言指令系统及汇编语言5.寄存器相对寻址在寄存器相对寻址方式中,操作数存放在存贮器中。操作数的地址是由段寄存器内容加上SI、DI、BX、BP之一的内容,再加上由指令中所指出的8位或16位相对地址偏移量而得到的。在一般情况下,若用SI、DI或BX进行相对寻址时,以数据段寄存器DS作为地址基准,而用BP寻址时,则以堆栈段寄存器作为地址基准。例:MOVAX,DISPSI其过程如图3.5所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.5寄存器相对寻址第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系
5、统及汇编语言7.基址、变址、相对寻址基址、变址、相对寻址方式实际上是第6种寻址方式的扩充。即操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对偏移地址而得到的。例:MOVAX,DISPBXS1其过程如图3.7所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.7基址、变址、相对寻址第第3章章80X86指令系统及汇编语言指令系统及汇编语言8.隐含寻址在有些指令的指令码中,不仅包含有操作码信息,而且还隐含了操作数地址的信息。例如乘法指令MUL的指令码中只需指明一个乘数的地址,另一个乘数和积的地址是隐含
6、固定的。这种将操作数的地址隐含在指令操作码中的寻址方式称为隐含寻址。第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.8段内相对寻址第第3章章80X86指令系统及汇编语言指令系统及汇编语言2段内间接寻址在段内间接寻址方式中,转移地址的段内偏移地址要么存放在一个16位的寄存器中,要么存放在存贮器的两个相邻单元中。存放偏移地址的寄存器和存贮器的地址将按指令码中规定的寻址方式给出。此时,寻址所得到的不是操作数,而是转移地址。例:JMPCX其过程如图3.9所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.9段内间接寻
7、址第第3章章80X86指令系统及汇编语言指令系统及汇编语言3段间直接寻址在段间直接寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址。例:JMPFARPTRADD1在执行这条段间直接寻址指令时,指令操作码后的第二个字将赋予代码段寄存器CS,第一个字将赋予指令指针寄存器IP。最后CS内容和IP内容相加则得转移地址,如图310所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.10段间直接寻址第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.11段间间接寻址第第3章章80X86指令系统及汇编语言指令
8、系统及汇编语言3.2指令系统指令系统8086/8088的指令系统大致可分为7种类型:数据传送指令算数运算指令逻辑运算和移位指令串操作指令程序控制指令处理器控制指令输入/输出指令第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.1数据传送指令1MOV指令MOVOPRD1,OPRD2目的源MOV是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。该指令可把一个字节或一个字操作数从源地址传送到目的地址。源操作数可以是累加器、寄存器、存贮器以及立即操作数,而目的操作数可以是累加器、寄存器和存贮器。数据传送方向的示意图如图3.12所示。第第3章章80X86指令系统及汇编语言指令系统
9、及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言各种数据传送指令例举如下:在CPU各内部寄存器之间传送数据。MOVAL,BL;8位数据传送指令(1个字节)MOVAX,DX;16位数据传送指令(1个字)MOVSI,BP;16位数据传送指令(1个字)立即数传送至CPU的通用寄存器(即AX、BX、CX、DX、BP、SP、SI、DI)。MOVCL,4;8位数据传送(1个字节)MOVAX,03FFH;16位数据传送(1个字)第第3章章80X86指令系统及汇编语言指令系统及汇编语言CPU内部寄存器(除了CS和IP以外)与存贮器(所有寻址方式)之间的数据传送,可以传送一个字节也可以传送一个
10、字。在CPU的通用寄存器与存贮器之间传送数据:MOVAL,BUFFERMOVDI,CX在CPU寄存器与存贮器之间传送数据:MOVDS,DATASIBXMOVDESTBPD1,ES第第3章章80X86指令系统及汇编语言指令系统及汇编语言第第3章章80X86指令系统及汇编语言指令系统及汇编语言其中,的传送可用通用寄存器作为中介,用两条传送指令完成。例如,为了将在同一个段内的偏移地址为AREA1的数据传送到偏移地址为AREA2单元中去,可执行以下两条传送指令:MOVAL,AREA1MOVAREA2,AL例如,为了将立即数传送给DS,可执行以下两条传送指令:MOVAX,1000HMOVDS,AX第第3
11、章章80X86指令系统及汇编语言指令系统及汇编语言例如,将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中,若AREA1和AREA2都在当前数据段中,可以用带有循环控制的数据传送程序来实现。程序如下:MOVSI,OFFSETAREA1MOVDI,OFFSETAREA2MOVCX,100AGAIN:MOVAL,SIMOVDI,ALINCSIINCDIDECCXJNZAGAIN第第3章章80X86指令系统及汇编语言指令系统及汇编语言2交换指令XCHGOPRD1,OPRD2交换指令把一个字节或一个字的源操作数与目的操作数相交换。这种交换能在通用寄存器与累加器之间、通用寄存器之
12、间、通用寄存器与存贮器之间进行,但是段寄存器不能作为一个操作数。例如:XCHGAL,CLXCHGAX,DIXCHGBX,SIXCHGAX,BUFFERXCHGBX,DATASI第第3章章80X86指令系统及汇编语言指令系统及汇编语言3地址传送指令8086/8088有3条地址传送指令。(1)LEA指令LEAOPRD1,OPRD2该指令把源操作数OPRD2的地址偏移量传送至目的操作数OPRD1中。(2)LDS指令该指令完成一个地址指针的传送。(3)LES指令这条指令除将地址指针的段地址送入ES外,其他操作与LDS的类似。第第3章章80X86指令系统及汇编语言指令系统及汇编语言4堆栈操作指令堆栈是内
13、存中的一个特定区域,由SS的内容和SP的内容来决定。堆栈操作具有先入后出的特点。用于堆栈操作的指令主要是:PUSHOPRD(堆栈压入指令)POPOPRD(堆栈弹出指令)堆栈操作指令中的操作数可以是段寄存器(除CS)的内容、16位的通用寄存器(标志寄存器有专门的出入栈指令)以及内存的16位字。例如:第第3章章80X86指令系统及汇编语言指令系统及汇编语言MOVAX,8000HMOVSS,AXMOVSP,2000HMOVDX,3E4AHPUSHDXPUSHAX第第3章章80X86指令系统及汇编语言指令系统及汇编语言当执行完两条压入堆栈的指令时,堆栈中的内容如图3.13所示。压入堆栈指令PUSHDX
14、的执行过程为:SP1SP;DH(SP);SP1SP;DL(SP)。弹出堆栈指令POPAX的过程与此刚好相反:(SP)AL;SP1SP;(SP)AH;SP1SP。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.13堆栈操作示意图第第3章章80X86指令系统及汇编语言指令系统及汇编语言5字节、字转换指令CBWCWDCBW指令将AL的符号位(bit7)扩展到整个AH中,即将字节转换成一个字。例如:MOVAL,4FHCBW执行后,AX004FH。第第3章章80X86指令系统及汇编语言指令系统及汇编语言CWD指令将AX的符号位(bit15)扩展到整个DX,即将字转换成双字。例如:MOVAX
15、,834EHCWD执行后,DXFFFFH,DXAXFFFF834EH。第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.2算术运算指令8086/8088可提供加、减、乘、除4种基本算术运算的操作指令。这些指令可实现字节或字的运算,也可以用于符号数和无符号数的运算。1加法指令(1)ADDOPRD1,OPRD2这条指令完成两个操作数相加,结果送至目的操作数OPRD1,即:OPRD1OPRD1OPRD2第第3章章80X86指令系统及汇编语言指令系统及汇编语言具体地说,该指令可以实现累加器与立即数、累加器与任一通用寄存器、累加器与存贮单元内容相加,其和放回累加器中。例如:ADDAL,30
16、ADDAX,3000HADDAX,SIADDAL,DATABX第第3章章80X86指令系统及汇编语言指令系统及汇编语言该指令也可以实现任一通用寄存器与立即数、累加器或别的寄存器、存贮单元的内容相加,其和放回寄存器中。例如:ADDBX,3FFHADDSI,AXADDDI,CXADDDX,DATABXSI第第3章章80X86指令系统及汇编语言指令系统及汇编语言该指令还可以实现存贮器操作数与立即数、累加器或别的寄存器的内容相加,其和放回存贮单元中。例如:ADDBETASI,100ADDBETASI,AXADDBETASI,DX这些指令执行时,对标志位CF、OF、PF、SF、ZF和AF都会产生影响。第
17、第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)ADC指令这条指令与ADD指令基本相同,只是相加时再加上进位位的当前值,即:OPRD1OPRD1OPRD2CFMOVAX,FIRSTADDAX,SECONDMOVTHIRD,AXMOVAX,FIRST2ADCAX,SECOND2MOVTHIRD2,AX第第3章章80X86指令系统及汇编语言指令系统及汇编语言(3)INCOPRD指令这条指令对指定的操作数进行加1操作,其操作数可以是通用寄存器,也可以在内存单元中。加1操作时,把操作数看作为无符号的二进制数。INC指令常用于在循环程序中修改地址指针和循环次数等。例如:INCALINCSI第
18、第3章章80X86指令系统及汇编语言指令系统及汇编语言2减法指令(1)SUBOPRD1,OPRD2该指令进行两个操作数的相减操作,即:OPRD1OPRD1OPRD2(2)SBB指令该指令与SUB相类似,只是相减时,还应减去借位标志CF的当前值,即:OPRD1OPRD1OPRD2CF第第3章章80X86指令系统及汇编语言指令系统及汇编语言(3)DECOPRD指令该指令实现对操作数的减1操作,所用的操作数可以是通用寄存器,也可以在内存单元中。减1操作时,把操作数看作为无符号的二进制数。例如:DECBXDECDI第第3章章80X86指令系统及汇编语言指令系统及汇编语言4)NEGOPRD该指令用来对操
19、作数进行求补操作,即对操作数按位取反后加1。例如:NEGALNEGMULRE第第3章章80X86指令系统及汇编语言指令系统及汇编语言(5)CMPOPRD1,OPRD2该指令为比较指令,与减法指令一样执行OPRD1OPRD2操作,但相减后不回送结果,只是根据相减结果修改标志位。即:OPRD1OPRD2比较指令可以用于累加器与立即数,累加器与任一通用寄存器或任一内存操作数之间的比较。例如:CMPAL,100CMPAX,SICMPAX,DATABX第第3章章80X86指令系统及汇编语言指令系统及汇编语言该指令也可以用于任一寄存器与立即数或别的寄存器及任一内存操作数之间的比较,例如:CMPBX,04F
20、EHCMPDX,DICMPCX,COUNTBP该指令还可以用于内存操作数与立即数及任一寄存器中操作数之间的比较。例如:CMPDATA,100CMPCOUNTSI,AXCMPPOINTERDI,BX第第3章章80X86指令系统及汇编语言指令系统及汇编语言综上所述,可以归纳出如下结论:当没有溢出时(OF0),若SF0,则AXBX;若SF1,则AXBX。当产生溢出时(OF1),若SF0,则AXBX;若SF1,则AXBX。用逻辑表达式又可简化为:若OFSF0,则AXBX;若OFSF1,则AXBX。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例如,若自BLOCK开始的内存缓冲区中,有100个
21、带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。MOVBX,OFFSETBLOCKMOVAX,BXINCBXINCBXMOVCX,99AGAIN:CMPAX,BXJGNEXTMOVAX,BX第第3章章80X86指令系统及汇编语言指令系统及汇编语言NEXT:INCBXINCBXDECCXJNEAGAINMOVMAX,AXHLT第第3章章80X86指令系统及汇编语言指令系统及汇编语言3乘法指令乘法指令分为无符号数乘法指令和带符号数乘法指令两种。(1)无符号数乘法指令MUL该指令的一般格式为:MULOPRD;OPRD为源操作数例:字节乘以字节MOVAL,LSRCBYTE;被乘数送ALM
22、ULRSRCBYTE;结果存于AX中第第3章章80X86指令系统及汇编语言指令系统及汇编语言字乘以字MOVAX,LSRCWORD;一个字送AXMULRSRCWORD;结果的高字节在DX中,低字节在AX中字节乘以字MOVAL,MULBYTE;字节被乘数送入ALCBW;AL中字节转换成AX中的字MULRSRCWORD第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)带符号数乘法指令IMUL这是一条带符号数的乘法指令,它和MUL一样可以进行字节和字节、字和字的乘法运算。结果放在AX或DX、AX中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。该指令的一般格式为:
23、IMULOPRD例:字节乘以字节MOVAL,LSRC_BYTE;被乘数送ALIMULRSRC_BYTE第第3章章80X86指令系统及汇编语言指令系统及汇编语言4除法指令8088有两条除法指令:无符号除法指令和带符号除法指令。(1)无符号数除法指令DIV执行该指令,如果结果大于寄存器可以保存的值时,则产生0型中断。例:字除以字节MOVAX,NUMERATORWORD;被除数送AXDIVDIVISORBYTE;商在AL中,余数在AH中第第3章章80X86指令系统及汇编语言指令系统及汇编语言字节除以字节MOVAL,NUMERATORBYTE;被除数送A1CBW;AL中的字节扩展成AX中的字DIVDI
24、VISORBYTE字除以字MOVAX,NUMERATORWORDCWD;把字转换成双字DX、AXDIVDIVISORWORD;商在AX中,余数在DX中第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)带符号除法指令IDIV该指令是带符号的除法指令。执行除法后,余数符号与被除数相同,其他同DIV指令。IDIV指令一般格式为:IDIVOPRD例:双倍字长除以字MOVDX,NUMHIWORD;被除数高位字送DXMOVAX,NUMLOWORD;被除数低位字送AXIDIVDIVISORWORDSI第第3章章80X86指令系统及汇编语言指令系统及汇编语言5调整指令8088的调整指令主要用于十进
25、制数的调整。AAA对AL中ASCII未压缩的十进制和进行调整;AAS对AL中ASCII未压缩的十进制差进行调整;AAD在除法指令前对AX中ASCII未压缩的十进制数进行调整;AAM对AX中两个ASCII未压缩十进制相乘结果进行调整;DAA对AL中的两个压缩十进制数相加之和进行调整,得到压缩十进制和;DAS对AL中的两个压缩十进制数相减之差进行调整,得到压缩十进制差。第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.3逻辑运算和移位指令逻辑运算和移位指令包括逻辑运算、移位和循环移位指令。1逻辑运算指令(1)NOTOPRD该指令对操作数进行求反操作,然后将结果送回。操作数可以是寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微型计算机 原理 接口 技术 80 X86 指令系统 汇编语言 课件
限制150内