微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt

上传人:可****阿 文档编号:72962497 上传时间:2023-02-14 格式:PPT 页数:211 大小:1.73MB
返回 下载 相关 举报
微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt_第1页
第1页 / 共211页
微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt_第2页
第2页 / 共211页
点击查看更多>>
资源描述

《微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt》由会员分享,可在线阅读,更多相关《微型计算机原理及接口技术第3章--80X86指令系统及汇编语言课件.ppt(211页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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该指令对操作数进行求反操作,然后将结果送回。操作数可以是寄存器

26、或存贮器的内容。该指令对标志位不产生影响。例如:NOTAL第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)AND指令该指令对两个操作数进行按位相“与”的逻辑运算。即只有参加相与的两位全为“1”时,相“与”结果才为“1”;否则相“与”结果为“0”。相“与”结果送回。AND指令可以进行字节操作,也可以进行字操作。AND指令的一般格式为:ANDOPRD1,OPRD2第第3章章80X86指令系统及汇编语言指令系统及汇编语言例如:ANDAL,0FHANDAX,BXANDSI,BPANDAX,DATA#-WORDANDDX,BUFFERSIBXANDDATA#-WORD,00FFHANDBL

27、OCKBPDI,DX第第3章章80X86指令系统及汇编语言指令系统及汇编语言(3)TEST指令该指令的操作功能与AND指令相同,其结果将反映在标志位上,但结果不送回,即TEST指令将不改变操作数的值。这条指令通常是在不希望改变操作数的前提下,用来检测某一位或某几位的状态。TEST指令的一般格式为:TESTOPRD,im;im是立即数立即数中哪一位为1,表示要对哪一位进行测试。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例如,若要检测AL中的最低位是否为1,且若为1则转移。在这种情况下可以用如下指令:TESTAL,01HJNZTHERETHERE:MOVBL,05H第第3章章80X8

28、6指令系统及汇编语言指令系统及汇编语言(4)OR指令该指令对两个操作数进行按位相“或”的逻辑操作,即进行相“或”的两位中的任一位如果为1时,则相“或”的结果为1;如果两位都为0时,其结果才为0。OR指令操作结果将送回。OR指令允许对字节或对字进行相“或”运算。OR指令使标志位CF0,OF0;相“或”操作的结果反映在标志位PF、SF和ZF上;对AF标志位未定义。OR指令的一般格式为:OROPRD1,OPRD2第第3章章80X86指令系统及汇编语言指令系统及汇编语言例如:ORAL,30HORAX,00FFHORBX,SIORBX,DATAWORDORBUFFERBX,SIORBUFFERBXSI,

29、8000H第第3章章80X86指令系统及汇编语言指令系统及汇编语言(5)XOR指令该指令对两个操作数进行按位“异或”操作,即进行“异或”操作的两位值不同时,其结果为“1”;否则就为0,操作结果送回。XOR指令的一般形式为:XOROPRD1,OPRD2第第3章章80X86指令系统及汇编语言指令系统及汇编语言例如:XORAL,0FHXORAX,BXXORDX,SIXORCX,CONNTWORDXORBUFFERBX,DIXORBUFFERBXSI,AX第第3章章80X86指令系统及汇编语言指令系统及汇编语言2移位指令8088有3条移位指令:算术左移和逻辑左移指令SALSHLOPRD,m算术右移指令

30、SAROPRD,m逻辑右移指令SHROPRD,m(1)SALSHL指令这两条指令的操作结果是完全一样的。每移位一次在右面最低位补一个0,而左面的最高位则移入标志位CF,如图3.14(a)所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.14移位指令示意图(a)SALSHL;(b)SAR;(c)SHR第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)SAR指令该指令每执行一次移位操作,就使操作数右移一位,但符号位保持不变,而最低位移至标志位CF,如图3.14(b)所示。SAR指令影响标志位CF、OF、PF、SF和ZF。右移一位相当于除以2,例如:MOVAL,16SA

31、RAL,1;执行后,AL的内容为8(相当于除以2)第第3章章80X86指令系统及汇编语言指令系统及汇编语言(3)SHR指令该指令每执行一次移位操作,就使操作数右移一位,最低位移至标志位CF中。与SAR不同的是,左面的最高位将补0,如图3.14(c)所示。该指令可以执行由m所指定的移位次数。第第3章章80X86指令系统及汇编语言指令系统及汇编语言3循环移位指令8088有4条循环移位指令:左循环移位指令ROLOPRD,m右循环移位指令ROROPRD,m带进位左循环移位指令RCLOPRD,m带进位右循环移位指令RCROPRD,m(1)ROL指令该指令每做一次移位,总是将最高位移入进位位CF中,并且还

32、将最高位移入操作数的最低位,从而构成一个环,如图3.15(a)所示。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.15循环移位指令示意图(a)ROL;(b)ROR;(c)RCL;(d)RCR第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)ROR指令该指令每做一次移位,总是将最低位移入进位标志位CF中,另外,还将最低位移入操作数的最高位,从而构成一个环,如图3.15(b)所示。当规定的循环次数为1时,若循环移位后,操作数的最高位和次高位不相等,则标志位CF1;否则OF0。这可以用来判别移位前后操作数的符号是否有改变。该指令只影响CF和OF标志位。第第3章章80X86

33、指令系统及汇编语言指令系统及汇编语言(3)RCL指令该指令是把标志位CF包含在内的循环左移指令。(4)RCR指令该指令是把进位标志位CF包含在内的右循环指令。第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.4串操作指令1MOVSMOVSBMOVSW该类指令是串传送指令,用于内存区之间字节串或字串的传送。串传送指令的一般格式为:MOVSOPRD1,OPRD2;OPRD2是源串,OPRD1是目的串MOVSB;字节传送MOVSW;字传送第第3章章80X86指令系统及汇编语言指令系统及汇编语言2CMPS/CMPSB/CMPSW该类指令是串比较指令,常用于内存区之间的数据、字符等的比较。

34、串比较指令的一般格式为CMPS OPRD1,OPRD2;OPRD1是 源 串,OPRD2是目的串CMPSB;字节比较CMPSW;字比较第第3章章80X86指令系统及汇编语言指令系统及汇编语言3SCASSCASBSCASW该类指令是串扫描指令,用于寻找内存区中指定的数据和字符。串扫描指令的一般格式为SCASOPRD;OPRD是目的串SCASB;字节操作SCASW;字操作第第3章章80X86指令系统及汇编语言指令系统及汇编语言4.LODSLODSBLODSW该类指令是串装入指令。串装入指令的一般格式为:LODSOPRD;OPRD为源串LODSB;字节操作LODSW;字操作第第3章章80X86指令系

35、统及汇编语言指令系统及汇编语言5STOSSTOSBSTOSW该类指令是字串存贮指令。串存贮指令的一般格式为:STOSOPRD;OPRD为目的串STOSB;字节操作STOSW;字操作第第3章章80X86指令系统及汇编语言指令系统及汇编语言6REPREP是串指令的前缀。当某一条串指令需要多次重复时,就可以加上该前缀。重复次数由CX决定,每重复执行一次,CX内容减1,直到CX0为止。7REPEREPNE它们是条件重复前缀。当条件满足时,才重复执行后面的串指令,一旦条件不满足,重复就停止。REPE指令是相等重复指令,当ZF1且CX未减到0,串指令重复执行。REPNE指令是不相等重复指令,当ZF0且CX

36、未减到0,串指令重复执行。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:数据段中地址BUFFER1开始的字符串,长度为1000字节,将其传送到附加段中地址BUFFER2开始的数据区。MOVSI,OFFSETBUFFER1;BUFFER1偏移地址送SIMOVDI,OFFSETBUFFER2;BUFFER2偏移地址送DIMOVCX,1000;传送次数送CXCLD;使DF0,SI、DI做加1操作REPMOVSB;串传送第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:若上例中的BUFFER1和BUFFER2都处于数据段,则程序可修改如下:MOVAX,DSMOVES,AX;使E

37、SDSLEASI,BLOCK1;源串地址送SILEADI,BLOCK2;目的串地址送DIMOVCX,500;重复次数送CXCLD;使DF0,SI、DI做加2操作REPEMOVSW;串传送第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:比较数据段中源串SOURCE和附加段中目的串DEST中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。LEADI,ES:DESTLEASI,SOURCEMOVCX,500CLDREPECMPBJZNEXTMATCH:DECSIMOVAL,BYTEPTRSINEXT:第第3章章80X86指令系统及汇编语言指令系统及汇

38、编语言3.2.5程序控制指令程序控制指令主要是指程序转移指令。转移类指令通过改变CS与IP的值或仅改变IP的值,以改变指令执行的顺序。1无条件转移、调用和返回指令这些指令都将引起程序执行顺序的改变。转移有段内转移和段间转移之分。所谓段内转移是指段地址不变,仅IP发生改变;而段间转移时,CS和IP均发生改变。第第3章章80X86指令系统及汇编语言指令系统及汇编语言(1)无条件转移指令JMP该指令分直接转移和间接转移两种。直接转移又可分短程(SHORT)、近程(NEAR)和远程(FAR)3种形式。当程序执行到JMP指令时,就无条件地转移到指令中所指示的目的地址。该指令的一般格式为JMPOPRD;O

39、PRD是转移的目的地址直接转移的3种形式为:短程转移JMPSHORTOPRD短程转移中目的地址与JMP指令所处地址的距离应在128127范围之内。近程转移JMPNEARPTROPRD或JMPOPRD;NEAR可省略第第3章章80X86指令系统及汇编语言指令系统及汇编语言远程转移JMPFARPTROPRD远程转移是段间的转移,目的地址与JMP指令所在地址不在同一段内。执行该指令时要修改CS和IP的内容。间接转移指令的目的地址可以由存贮器或寄存器给出:段内间接转移JMPWORDPTROPRD段间间接转移JMPDWORDPTROPRD第第3章章80X86指令系统及汇编语言指令系统及汇编语言(2)调用

40、和返回指令CALL指令用来调用一个过程,在过程执行完后可使用返回指令RET,使程序返回调用程序继续执行。由于过程有段间(即远程FAR)和段内调用(即近程NEAR)之分,所以CALL也有FAR和NEAR之分,RET也分段间和段内返回两种。这由被调用过程的定义所决定。调用指令一般格式为:CALLNEARPTROPRD;段内调用CALLFARPTROPRD;段间调用第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:近程调用;主程序(近程调用)CALLNEARPTRPROAD;过程PROAD定义PROADPROCNEARPUSHAXPUSHCXPUSHSILEASI,ARY第第3章章80X8

41、6指令系统及汇编语言指令系统及汇编语言MOVCX,COUNTXORAX,AXNEXT:ADDAX,SIADDSI,2LOOPNEXTMOVSUM,AXPOPSIPOPCXPOPAXRETPROADENDP第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:远程调用;主程序(远程调用)CALLFARPTRPROADD;过程PROADD定义(远程调用过程)PROADDPROCFARPUSHAXPUSHCX第第3章章80X86指令系统及汇编语言指令系统及汇编语言PUSHSIPUSHDIMOVSI,BXMOVDI,BX2MOVCX,DIMOVDI,BX4XORAX,AXNEXT1:ADDAX,

42、SIADDSI,2LOOPNEXT1MOVDI,AX第第3章章80X86指令系统及汇编语言指令系统及汇编语言POPDIPOPSIPOPCXPOPAXRETPROADDENDP第第3章章80X86指令系统及汇编语言指令系统及汇编语言2条件转移指令条件转移指令将上一条指令所设置的某些标志位的状态作为测试条件,条件满足则转向指令中所指示的目的地址。(1)以单个标志位为条件JOOPRD;溢出转移JNOOPRD;不溢出转移JSOPRD;结果为负转移JNSOPRD;结果为正转移JCOPRD;进位转移JNCOPRD;无进位则转移JEJZOPRD;等于或为零转移第第3章章80X86指令系统及汇编语言指令系统及

43、汇编语言(2)无符号数比较JAJNBEOPRD;高于或不低于等于转移JAEJNBOPRD;高于等于或不低于转移JBJNAEOPRD;低于或不高于等于转移JBEJNAOPRD;低于等于或不高于转移(3)带符号数比较JGJNLEOPRD;大于或不小于等于转移JGEJNLOPRD;大于等于或不小于转移JLJNGEOPRD;小于或不大于等于转移JLEJNGOPRD;小于等于或不大于转移第第3章章80X86指令系统及汇编语言指令系统及汇编语言3循环控制指令该类指令的一般格式为:LOOPOPRD;CX=0循环LOOPEOPRD;CX=0且ZF=1循环LOOPNEOPRD;CX=0且ZF=0循环在LOOPE

44、和LOOPNE两条指令中,只要两个条件中任一个不满足,循环就结束。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:SUBDI,BXINCDIMOVCX,DIDECBXNEXT:INCBXCMPBYTEPTRBX,0LOOPENEXT第第3章章80X86指令系统及汇编语言指令系统及汇编语言4软中断指令及中断返回指令当程序执行到中断指令INT时,便中断当前程序的执行,转向由256个中断向量所提供的中断入口地址之一去执行。软中断指令的一般格式为:INTOPRD;OPRD可以取00HFFH中的值第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.6处理器控制指令该类指令用来控制

45、处理器与协处理器之间的交互作用,修改标志寄存器,以及使处理器与外部设备同步等。1.标志位操作指令STC;使CF=1CLC;使CF=0CMC;使CF取反STD;使DF=1CLD;使DF=0STI;使IF=1CLI;使IF=0第第3章章80X86指令系统及汇编语言指令系统及汇编语言2外部同步指令(1)暂停指令HLT(2)空操作指令NOP(3)等待指令WAIT(4)封锁总线指令LOCK(5)处理器交权指令ESC第第3章章80X86指令系统及汇编语言指令系统及汇编语言3.2.7输入输出指令输入指令的一般格式为:INACC,PORT它完成从接口到CPU的输入操作。输出指令的一般格式为:OUTPORT,A

46、CC它完成从CPU到接口的输出操作。第第3章章80X86指令系统及汇编语言指令系统及汇编语言1.直接寻址输入输出指令中直接给出一个字节表示的接口地址。由于接口地址用一个字节表示,故可寻址的接口地址只有256个(00H到FFH)。例如:INAL,35HOUT44H,AX第第3章章80X86指令系统及汇编语言指令系统及汇编语言2.寄存器间接寻址输入输出指令中接口地址由DX的内容来决定。由于DX是16位的寄存器,故可寻址的接口地址为64K个(0000H到FFFFH)。例如:MOVDX,03F8HINAL,DX表示由接口地址03F8H输入一个字节到AL。第第3章章80X86指令系统及汇编语言指令系统及

47、汇编语言3.380386/80486指令系统指令系统3.3.180386的寻址方式80386的寻址方式分为三大类。(1)寄存器寻址方式在这种寻址方式,操作数放在32位、16位或8位的通用寄存器中。(2)立即数方式操作数以立即数形式出现在指令中。(3)存贮器寻址方式第第3章章80X86指令系统及汇编语言指令系统及汇编语言按照80386系统的存贮器组织方式,逻辑地址由选择子和偏移量组成。偏移量也称为有效地址,由4个分量计算得到:基址:任何通用寄存器都可作为基址寄存器,其内容即为基址。位移量:在指令操作码后面的32位、16位或8位的数。变址:除了ESP寄存器外,任何通用寄存器都可以作为变址寄存器,其

48、内容即为变址值。比例因子:变址寄存器的值可以乘以一个比例因子,根据操作数的长度可为1字节、2字节、4字节或8字节,比例因子相应地可为1,2,4或8。第第3章章80X86指令系统及汇编语言指令系统及汇编语言由上面4个分量计算有效地址的方法为:EA基址变址比例因子位移量图3.16表示了这种寻址计算方法。第第3章章80X86指令系统及汇编语言指令系统及汇编语言图3.1680386寻址计算方法第第3章章80X86指令系统及汇编语言指令系统及汇编语言按照4个分量组合有效地址的不同方法,可以有下述9种存贮器寻址方式。(1)直接寻址方式位移量就是操作数的有效地址,此位移量包含在指令中。例:INCWORDPT

49、R500WB;字的有效地址为500(2)寄存器间接寻址方式操作数的有效地址即基址寄存器的内容。例:MOVECX,EDX;ECX指出有效地址第第3章章80X86指令系统及汇编语言指令系统及汇编语言(3)基址寻址方式基址寄存器的内容和位移量相加形成有效地址。例:MOVECX,EAX24;由EAX中内容加24组成有效地址(4)变址寻址方式变址寄存器的内容和位移量相加形成有效地址。例:ADDEAX,ESI,5;ESI的内容加5组成有效地址(5)带比例因子的变址寻址方式变址寄存器的内容乘以比例因子,再加位移量得到有效地址。第第3章章80X86指令系统及汇编语言指令系统及汇编语言例:IMULEBX,ESI

50、4,7;ESI的内容乘以4再加7形成有效地址(6)基址变址寻址方式基址寄存器的内容加变址寄存器的内容组成有效地址。例:MOVEAX,ESIEBX;EBX的内容加ESI的内容即有效地址(7)基址加比例因子变址寻址方式变址寄存器的内容乘以比例因子,再加上基址寄存器的内容作为有效地址。例:MOVECX,EDI8EAX;EDI内容乘以8再加EAX内容即为有效地址第第3章章80X86指令系统及汇编语言指令系统及汇编语言(8)带位移量的基址变址寻址方式基址寄存器的内容加变址寄存器的内容,再加位移量形成有效地址。例:ADDEDX,ESIEBP100H;ESI的内容加EBP的内容再加100H;即为有效地址(9

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁