1、汇编语言程序设计汇编语言程序设计第第1章章 概述概述第第2章章 8086CPU汇编程序设计环境汇编程序设计环境第第3章章 8086微处理器的指令系统微处理器的指令系统 第第4章章 8086汇编语言汇编语言 第第5章章 8086汇编语言基本程序设计汇编语言基本程序设计 第第6章章 输入输入/输出程序设计输出程序设计 第第7章章 32位汇编语言位汇编语言 3.1 8086CPU的寻址方式的寻址方式3.2 8086指令系统指令系统 微机中的每条指令由两部分组成:操作码字段和地址码字段微机中的每条指令由两部分组成:操作码字段和地址码字段 操作码字段:指示计算机所要执行的操作,即指令操作的性操作码字段:
2、指示计算机所要执行的操作,即指令操作的性质。比如加、减运算等。质。比如加、减运算等。操作数字段操作数字段(地址码地址码):指出在指令执行操作中所需要的操作:指出在指令执行操作中所需要的操作对象信息,它既可以是操作数本身,也可以是操作数地址或对象信息,它既可以是操作数本身,也可以是操作数地址或地址的一部分,还可以是指向操作数地址的指针或其他有关地址的一部分,还可以是指向操作数地址的指针或其他有关操作数的信息。操作数的信息。指令中操作数的种类有:指令中操作数的种类有:(1)立即操作数:指令要操作的数据在指令代码中,称)立即操作数:指令要操作的数据在指令代码中,称此数据为立即数。此数据为立即数。(2
3、)存储器操作数:指令要操作的数据在存储器)存储器操作数:指令要操作的数据在存储器(内存内存)中,称此数据为存储器操作数。中,称此数据为存储器操作数。(3)寄存器操作数:指令要操作的数据在)寄存器操作数:指令要操作的数据在CPU的寄存器的寄存器中,称此数据为寄存器操作数。中,称此数据为寄存器操作数。(4)I/O端口操作数:操作的数据在端口操作数:操作的数据在I/O端口中,称此数端口中,称此数据为据为I/O端口操作数端口操作数。在在8086/8088微机汇编指令中,操作数有零个、一个和两个三种形式。微机汇编指令中,操作数有零个、一个和两个三种形式。对于有两个操作码的指令,一个称为源操作数,该操作数
4、在指令执行对于有两个操作码的指令,一个称为源操作数,该操作数在指令执行过程中不改变原值。另一个称为目标过程中不改变原值。另一个称为目标(目的目的)操作数,该操作数指令执操作数,该操作数指令执行后一般被其结果替代。对应只有一个操作数的指令,该操作数为源行后一般被其结果替代。对应只有一个操作数的指令,该操作数为源操作数或为目标操作数。操作数或为目标操作数。1立即寻址方式立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码前。这种操作数称为立即数。码后存放在代码前。这种操作数称为立即数。立即数可以是立即数可以是8位,也可以是
5、位,也可以是16位,如果操作数位位,如果操作数位16位,位,操作数代码在存储器单元中存放时按照低地址存放低字节,操作数代码在存储器单元中存放时按照低地址存放低字节,高地址存放高字节的原则。高地址存放高字节的原则。操作数操作数(为一常数为一常数)直接直接由指令给出由指令给出 (此操作数称为立即数此操作数称为立即数)立即寻址只能用于源操作数立即寻址只能用于源操作数 操作数在操作数在CPU内部的寄存器中,指令中指定寄存器号。对内部的寄存器中,指令中指定寄存器号。对于于16位操作数,寄存器可以是位操作数,寄存器可以是AX、BX、CX、DX,SI、DI、SP和和 BP等;对于等;对于8位操作数,寄存器可
6、以是位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和和DH。操作数在存储器中,指令直接包含有操作数的有效地址操作数在存储器中,指令直接包含有操作数的有效地址(EA)。EA=偏移量偏移量操作数一般存放在数据段,所以操作数的地址由操作数一般存放在数据段,所以操作数的地址由DS加上指加上指令中直接给出的令中直接给出的16位偏移量得到。如果采用段超越前缀,则位偏移量得到。如果采用段超越前缀,则操作数也可含在数据段外其他段中。操作数也可含在数据段外其他段中。例:设数据段寄存器例:设数据段寄存器DS中的内容为中的内容为1000H,偏移量,偏移量1234H的字存储单元中的内容为的字存储单元中
7、的内容为5678H,那么在执行指令,那么在执行指令“MOV AX,1234H”后寄存器后寄存器AX的内容是的内容是5678H,图,图3.4是此指令是此指令的存储和执行情况。的存储和执行情况。例例3.3 TABLE是在数据段定义的一个字节数组的首地址的变是在数据段定义的一个字节数组的首地址的变量名,其偏移量为量名,其偏移量为1000H,则指令,则指令 MOV AL,TABLE 或或 MOV AL,TABLE或或 MOV AL,1000H上述三种表示方式操作结果相同,一般常用第一种方式表示。上述三种表示方式操作结果相同,一般常用第一种方式表示。4寄存器间接寻址方式寄存器间接寻址方式操作数在存储器中
8、,操作数的有效地址在操作数在存储器中,操作数的有效地址在SI、DI、BX和和BP这四个寄存器之一中,在一般情况这四个寄存器之一中,在一般情况(即不使用段跨越前缀明即不使用段跨越前缀明确指定段寄存器确指定段寄存器)下,如果有效地址在下,如果有效地址在SI、DI和和BX中,则默中,则默认以认以DS段寄存器的内容为段基址;如果有效地址在段寄存器的内容为段基址;如果有效地址在BP中,中,则默认以则默认以SS段寄存器的内容为段基址。段寄存器的内容为段基址。例例3.4 假设假设(DS)=2000H,(SI)=1234H,字存储单元,字存储单元(21234H)=5678H,则,则执行指令执行指令MOV AX
9、,SI后,后,AX的内的内容为容为5678H。下图。下图表示该指令的存储和执行情况。表示该指令的存储和执行情况。如果操作数的有效地址不是在默认的数据段中,需要用段如果操作数的有效地址不是在默认的数据段中,需要用段跨越前缀指明。例跨越前缀指明。例BX表示的是堆栈段的偏移量,为了存取表示的是堆栈段的偏移量,为了存取堆栈段中的内容,使用下面指令的寄存器间接寻址表示:堆栈段中的内容,使用下面指令的寄存器间接寻址表示:MOV DL,SS:BX ;引用的段寄存器是;引用的段寄存器是SS注意在书写表示寄存器间接寻址时,寄存器名一定要放在注意在书写表示寄存器间接寻址时,寄存器名一定要放在方括号中方括号中 操作
10、数在存储器中,操作数的有效地址是一个基址寄存器操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器的或变址寄存器的(SI、DI)内容加上指令中给定的内容加上指令中给定的8位或位或16位位移量之和。即:位位移量之和。即:EA=基址寄存器基址寄存器(或变址寄存器或变址寄存器)的内容的内容+8位位(或或16位位)位移量位移量有效地址有效地址EA的构成有四种组合:的构成有四种组合:(BX)+8位位(或或16位位)位移量位移量(BP)+8位位(或或16位位)位移量位移量(DI)+8位位(或或16位位)位移量位移量(SI)+8位位(或或16位位)位移量位移量 在一般情况下,如果在一
11、般情况下,如果SI、DI或或 BX的内容作为有效地值的一的内容作为有效地值的一部分,那么引用的段寄存器默认是部分,那么引用的段寄存器默认是DS;如果;如果BP的内容作为的内容作为有效地值的一部分,那么引用的段寄存器默认是有效地值的一部分,那么引用的段寄存器默认是SS。在指令中给定的在指令中给定的8位或位或16位位移量采用补码形式表示。在计位位移量采用补码形式表示。在计算有效地址时,如位移量是算有效地址时,如位移量是8位,则被符号扩展成位,则被符号扩展成16位。位。例例3.5假设假设(DS)=2000H,(DI)=1234H,字存储单元字存储单元(23234H)=3456H,则执行指令,则执行指
12、令MOV AX,DI+2000H后,后,AX的内容为的内容为3456H。下图。下图表示该指令的存储和执行情况。表示该指令的存储和执行情况。注意书写时基址寄存器名或变址寄存器名一定要放在方括注意书写时基址寄存器名或变址寄存器名一定要放在方括号中,而位移量可不写在方括号中。下面两条指令源操作数号中,而位移量可不写在方括号中。下面两条指令源操作数的寻址方式是相同的,表示的形式等价。的寻址方式是相同的,表示的形式等价。MOV AX,BX+10 MOV AX,10BX 也可以用基址寄存器或变址寄存器与单元变量名的组也可以用基址寄存器或变址寄存器与单元变量名的组合来表示寄存器相对寻址,设合来表示寄存器相对
13、寻址,设VAR为单元的变量名,有如下为单元的变量名,有如下表示:表示:MOV AX,BX+VAR MOV AX,VARBX6基址变址寻址方式基址变址寻址方式操作数在存储器中,操作数的有效地址由基址寄存器的内操作数在存储器中,操作数的有效地址由基址寄存器的内容与变址寄存器的内容相加得到。即:容与变址寄存器的内容相加得到。即:EA=基址寄存器的内容基址寄存器的内容(BX、BP)+变址寄存器变址寄存器(DI、SI)的内容的内容有效地址有效地址EA的构成有四种组合:的构成有四种组合:(BX)+(DI)(BX)+(SI)(BP)+(DI)(BP)+(SI)在一般情况在一般情况(即不使用段跨越前缀明确指定
14、段寄存器即不使用段跨越前缀明确指定段寄存器)下,如下,如果果BP的内容作为有效地址的一部分,则默认的内容作为有效地址的一部分,则默认SS的内容为段的内容为段基址,否则默认基址,否则默认DS的内容为段基址。的内容为段基址。例例3.6假设假设(DS)=1000H,(BX)=1234H,(DI)=2000H,字,字存储单元存储单元(13234H)=4567H,则执行指令,则执行指令MOV AX,BX+DI后,后,(AX)=4567H。下图。下图表示该指令的执行情况。表示该指令的执行情况。下面指令中,源操作数采用基址变址寻址,通过段前缀来下面指令中,源操作数采用基址变址寻址,通过段前缀来引用段寄存器引
15、用段寄存器ES。MOV AX,ES:BX+SI这种寻址方式适用于数组或表格处理。用基址寄存器存放这种寻址方式适用于数组或表格处理。用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素,或反数组首地址,而用变址寄存器来定位数组中的各元素,或反之。由于两个寄存器都可以改变,所以能更加灵活的访问数之。由于两个寄存器都可以改变,所以能更加灵活的访问数组或表格中的元素。组或表格中的元素。下面的二种写法方法是等价的。下面的二种写法方法是等价的。MOV AX,BX+DI MOV AX,DIBX7相对基址变址寻址相对基址变址寻址操作数在存储器中,操作数的有效地址由基址寄存器之一的内操作数在存储器中,
16、操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容与指令中给定的容与变址寄存器之一的内容与指令中给定的8位或位或16位位移量相位位移量相加得到。也即:加得到。也即:EA=基址寄存器的内容基址寄存器的内容+变址寄存器的内容变址寄存器的内容+8位位(或或16位位)位移位移量量有效地址有效地址EA的构成有四种组合:的构成有四种组合:(BX)+(DI)+8位位(或或16位位)位移量位移量(BX)+(SI)+8位位(或或16位位)位移量位移量(BP)+(DI)+8位位(或或16位位)位移量位移量(BP)+(SI)+8位位(或或16位位)位移量位移量在指令中给定的在指令中给定的8位或位或16位位
17、移量采用补码形式表示。在计算位位移量采用补码形式表示。在计算有效地址时,如果位移量是有效地址时,如果位移量是8位,那么被带符号扩展成位,那么被带符号扩展成16位。位。例例3.7 假设假设(DS)=1000H,(BX)=1234H,(DI)=3000H,字,字存储单元存储单元(14232H)=7890H,则执行指令,则执行指令MOV AX,BX+DI-2后,后,(AX)=7890H。下。下图表示该指令的存储和执行图表示该指令的存储和执行情况,位移用补码表示情况,位移用补码表示 相对基址加变址寻址这种寻址方式的表示方法多种多样,相对基址加变址寻址这种寻址方式的表示方法多种多样,下面四种表示方法是等
18、价的。下面四种表示方法是等价的。MOV AX,BX+DI+1234H MOV AX,1234HBX+DI MOV AX,1234H,BXDI MOV AX,1234HDIBX 注意后注意后5种寻址方式都与存储器单元有关,在寻址过程中种寻址方式都与存储器单元有关,在寻址过程中都要计算存储器单元的有效地址都要计算存储器单元的有效地址EA,所以它们有时统称为,所以它们有时统称为存储器寻址,只是寻址方式不同,得到有效地址存储器寻址,只是寻址方式不同,得到有效地址EA的方法的方法不同。不同。与指令有关的寻址方式主要如何去查找下一条将要执行指与指令有关的寻址方式主要如何去查找下一条将要执行指令的地址。程序
19、正常顺序执行时,每取一条指令执行令的地址。程序正常顺序执行时,每取一条指令执行(IP)+n(IP),其中,其中n为当前正在执行指令的字节数,下一条为当前正在执行指令的字节数,下一条将要执行指令的物理地址为:将要执行指令的物理地址为:物理地址物理地址=(CS)*16+(IP)根据转移时是否重置代码段寄存器根据转移时是否重置代码段寄存器CS的内容,它们又可分的内容,它们又可分为段内转移和段间转移两大类。段内转移是指仅重新设置指为段内转移和段间转移两大类。段内转移是指仅重新设置指令指针令指针IP的转移;段间转移是指不仅重新设置的转移;段间转移是指不仅重新设置IP,而且重新,而且重新设置代码段寄存器设
20、置代码段寄存器CS的转移,由于重置的转移,由于重置CS,所以转移后继,所以转移后继续执行的指令在另一段中。续执行的指令在另一段中。无论是段内转移还是段间转移都有直接和间接两种方式,无论是段内转移还是段间转移都有直接和间接两种方式,因此有四种转移的寻址方式。因此有四种转移的寻址方式。转移的有效地址转移的有效地址EA是指令中的是指令中的8位或位或16为位移量与当前指为位移量与当前指令指针寄存器令指针寄存器IP内容之和,取代当前的内容之和,取代当前的IP中的内容。转移的中的内容。转移的有效地址为:有效地址为:EA=(IP)+8位或位或16为位移量为位移量IP当转移的位移量为当转移的位移量为8位时,位
21、时,EA的转移范围在的转移范围在-128至至+127,地址差值只要用一个字节表示,就称为短转移;当转移的位地址差值只要用一个字节表示,就称为短转移;当转移的位移量为移量为16位时,位时,EA的转移范围在的转移范围在-3276832767,地址差要,地址差要用一个字表示,就称为近转移。用一个字表示,就称为近转移。注意如果短转移以当前执行的转移指令本身的注意如果短转移以当前执行的转移指令本身的IP为基准,那为基准,那么短转移的范围则在么短转移的范围则在-126至至+129之间;如果短转移以当前执之间;如果短转移以当前执行的转移指令执行完成后的行的转移指令执行完成后的IP为基准,那么短转移的范围则为
22、基准,那么短转移的范围则在在-128至至+127之间,近转移同样如此。短转移和近转移都是之间,近转移同样如此。短转移和近转移都是相对相对IP的内容而言,又称相对转移寻址。的内容而言,又称相对转移寻址。转移的有效地址转移的有效地址EA如果指定的是如果指定的是16位寄存器或字存储单元中位寄存器或字存储单元中的内容表示,则将寄存器或字存储单元的内容取代当前的的内容表示,则将寄存器或字存储单元的内容取代当前的IP中中的内容。转移的有效地址为:的内容。转移的有效地址为:EA=16位寄存器或字存储器单元的内容位寄存器或字存储器单元的内容IP即如果即如果EA由由16寄存器给出,则将寄存器的内容替代寄存器给出
23、,则将寄存器的内容替代IP的内容;的内容;如果是存储器寻址,将使用存储器的数据寻址方式获得的如果是存储器寻址,将使用存储器的数据寻址方式获得的EA所所指定的字存储单元的内容作为转移偏移地址替代指定的字存储单元的内容作为转移偏移地址替代IP的内容,将的内容,将CS的内容乘以的内容乘以16与与IP的内容相加得到实际的指令转移地址。的内容相加得到实际的指令转移地址。该种寻址方式不仅用指令中直接提供的转移偏移地址该种寻址方式不仅用指令中直接提供的转移偏移地址EA替替代代IP的内容,而且指令同时直接提供了指令转移目标所在的的内容,而且指令同时直接提供了指令转移目标所在的段基址替代当前段基址替代当前CS的
24、内容,实现程序从一个段到另一个段的内容,实现程序从一个段到另一个段的转移。的转移。该种寻址方式是根据存储器的数据寻址方式获得该种寻址方式是根据存储器的数据寻址方式获得EA,将,将EA所指定的双字存储单元的内容的替代当前的所指定的双字存储单元的内容的替代当前的IP和和CS值,即将第值,即将第一个存储字单元内容替代一个存储字单元内容替代IP的内容,将第二个存储字单元内容的内容,将第二个存储字单元内容替代替代CS的内容。的内容。注意段内转移的寻址方式只改变注意段内转移的寻址方式只改变IP的内容,而不改变当前的内容,而不改变当前段寄存器段寄存器CS中的内容,即实现段内的中的内容,即实现段内的64KB范
25、围内的转移;而范围内的转移;而段间转移的寻址方式不仅改变段间转移的寻址方式不仅改变IP的内容,而且改变当前段寄存的内容,而且改变当前段寄存器器CS的内容,实现段和段之间的转移,转移范围超出的内容,实现段和段之间的转移,转移范围超出64K范围范围以外,对以外,对8086微机而言,可以实现微机而言,可以实现1M范围的任意位置的转移。范围的任意位置的转移。8086/8088的指令系统可分为如下六个功能组:的指令系统可分为如下六个功能组:(1)数据传送指令;)数据传送指令;(2)算术运算指令;)算术运算指令;(3)逻辑运算指令;)逻辑运算指令;(4)串处理指令;)串处理指令;(5)程序转移指令;)程序
26、转移指令;(6)处理机控制与杂项操作指令。)处理机控制与杂项操作指令。对于每一条指令,在学习过程中重点注意以下几点:对于每一条指令,在学习过程中重点注意以下几点:1)指令的功能和操作过程;)指令的功能和操作过程;2)适用于指令的操作数寻址方式;)适用于指令的操作数寻址方式;3)指令对标志的影响;)指令对标志的影响;4)使用说明。)使用说明。8086/8088有有4类传送指令,分别是:类传送指令,分别是:通用传送指令,通用传送指令,累加累加器专用传送指令,器专用传送指令,地址传送指令,地址传送指令,标志传送指令。数据传标志传送指令。数据传送指令共有送指令共有12条:条:MOV、PUSH、POP、
27、XCHG、XLAT、LEA、LDS、LES、LAHF、SAHF、PUSHF、POPF1传送指令传送指令MOV(move)指令格式:指令格式:MOV DEST,SRC 操作:此指令把一个字节或一个字从源操作数操作:此指令把一个字节或一个字从源操作数SRC送至送至目标操作数目标操作数DST。DEST(SRC)受影响的状态标志位:没有受影响的状态标志位:没有 说明:说明:(1)指令中)指令中DEST和和SRC不能同时为存储器操作数不能同时为存储器操作数(同时为同时为存储器寻址方式得到的操作数,串操作指令除外存储器寻址方式得到的操作数,串操作指令除外);(2)CS不能做为目标操作数使用不能做为目标操作
28、数使用(适合所有指令适合所有指令);(3)段寄存器之间不能互相传送,立即数不能直接送入段)段寄存器之间不能互相传送,立即数不能直接送入段寄存器,只能间接传送;寄存器,只能间接传送;(4)要求传送数据的类型一致,即)要求传送数据的类型一致,即8位之间传送或位之间传送或16位之位之间传送;间传送;(5)立即数永远不能作为目标操作数)立即数永远不能作为目标操作数(适合所有指令适合所有指令);(6)指令指针)指令指针IP不能作为寄存器使用;不能作为寄存器使用;(7)两操作数不能同时为立即数。)两操作数不能同时为立即数。以上这些说明规定不仅适用于以上这些说明规定不仅适用于MOV指令,也同样适用于指令,也
29、同样适用于所有涉及到操作数的指令。所有涉及到操作数的指令。例例3.8MOV AH,ALMOV BP,AXMOV AX,CSMOV AL,12HMOV SI,-5MOV VAR1,123 ;VAR1是变量名,代表一个存储是变量名,代表一个存储单元单元MOV VAR2,3456H ;VAR2是一个字变量是一个字变量MOV SI,6543H如果要在两个存储单元件传送数据如果要在两个存储单元件传送数据,那么可利用通用寄存器过渡,那么可利用通用寄存器过渡的方法进行。的方法进行。例例把字变量把字变量VAR1的内容送到字变量的内容送到字变量VAR2中,指令如下:中,指令如下:MOV AX,VAR1MOV V
30、AR2,AX这种利用通用寄存器间接传送的方法,可以实现段寄存器间的数这种利用通用寄存器间接传送的方法,可以实现段寄存器间的数据传送。例:据传送。例:MOV AX,CS ;把;把CS的内容送到的内容送到DSMOV DS,AX以下的指令是不正确的。以下的指令是不正确的。MOV BL,AX;操作数的类型不一致;操作数的类型不一致MOV ES,DS;段寄存器之间不能互相传送;段寄存器之间不能互相传送MOV CS,AX;不能为;不能为CS传送数据传送数据MOV DS,100H;立即数不能直接送入段寄存器;立即数不能直接送入段寄存器MOV 100H,AX ;立即数不能为目的操作数;立即数不能为目的操作数
31、MOV VAR1,VAR2 ;两个操作数不能同时为存储器操作数;两个操作数不能同时为存储器操作数 MOV SI,DI;同上;同上指令格式指令格式:PUSH SRC操作操作:(1)堆栈指针寄存器减堆栈指针寄存器减2 SPSP-2 (2)将给定的操作数存放到由将给定的操作数存放到由SP指出的栈顶中。指出的栈顶中。(SP+1,SP)(SRC)受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:PUSH指令的目标地址一定在当前堆栈中。指令的目标地址一定在当前堆栈中。SS内内容为段基址,偏移量由堆栈指针寄存器容为段基址,偏移量由堆栈指针寄存器SP给给u出。操作数一定出。操作数一定是是16位的寄存
32、器或存储器操作数。位的寄存器或存储器操作数。例例3.10设当前设当前(SS)=2000H,(SP)=00FEH,执行下列指令:,执行下列指令:MOV AX,1234HPUSH AX 指令执行后指令执行后(SS)=2000H,(SP)=00FCH,指令执行过程如图所,指令执行过程如图所示。示。指令格式指令格式:POPDEST操作操作:(1)将堆栈栈顶中存放的字传送到操作数中。将堆栈栈顶中存放的字传送到操作数中。DEST(SP+1,SP)(2)堆栈指针寄存器加堆栈指针寄存器加2 SPSP+2受影响的状态标志位受影响的状态标志位:没有没有说明:目标操作数只能是说明:目标操作数只能是16位的存储器单元
33、或寄存器操作数位的存储器单元或寄存器操作数(CS除外除外)。例例3.11 设当前设当前(SS)=2000H,(SP)=00FEH,(200FEH)=5678H,执行下列指令:,执行下列指令:MOV CX,1234HPOPCX指令执行后指令执行后(CX)=5678H,指令执行过程的堆栈变化,指令执行过程的堆栈变化如图所示。如图所示。指令格式指令格式:XCHG DEST,SRC 操作操作:DEST的内容与的内容与SRC的内容互换。的内容互换。(DEST)(SRC)受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:(1)DEST和和SRC不能同时为存储器操作数,必须不能同时为存储器操作数,
34、必须有一个为寄存器操作数;有一个为寄存器操作数;(2)不允许使用段寄存器;)不允许使用段寄存器;(3)可以为立即数之外的任意寻址方式。)可以为立即数之外的任意寻址方式。例例3.12 设设(AX)=1234H,(BX)=4567H,则执行指令,则执行指令XCHG AX,BX后,后,(AX)=4567H,(BX)=1234H。如果不采用交换指令,实现上述操作,则需要三条指令即:如果不采用交换指令,实现上述操作,则需要三条指令即:MOV DX,AX MOV AX,BX MOV BX,DX指令格式:指令格式:XLAT操作:首先将操作:首先将BX中的内容与中的内容与AL的内容之和作为的内容之和作为操作的
35、存储单元的有效地址,然后将该地址单元中的操作的存储单元的有效地址,然后将该地址单元中的内容送到内容送到AL中。中。AL(BX)+(AL)受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:XLAT指令主要用于查表。表的起始地址即表指令主要用于查表。表的起始地址即表头地址由头地址由BX给出,给出,AL中的操作前的内容是要寻址的表中的操作前的内容是要寻址的表中相对于表头起始地址的位移量,规定表中第一个字中相对于表头起始地址的位移量,规定表中第一个字节的位移量为节的位移量为0。操作结果是把。操作结果是把AL的内容作为相对于的内容作为相对于BX给出表头地址的偏移量所指定单元中的内容送入给出表头
36、地址的偏移量所指定单元中的内容送入AL中,中,BX是基址寄存器,是基址寄存器,AL是变址寄存器,所以该指令是变址寄存器,所以该指令相当于基址变址寻址方式,主要用于代码转换,如字相当于基址变址寻址方式,主要用于代码转换,如字符和对应的符和对应的ASCII码之间的转换等。码之间的转换等。例例3.13 设设(DS)=2000H,在,在TABLE表中存放表中存放09的的ASCII码,若码,若(AL)=3,则通过下列指令可取得,则通过下列指令可取得3的的ASCII码:码:MOV BX,OFFSET TABLE;取;取TABLE变量的变量的 偏移地址,偏移地址,(BX)=0040HMOV AL,3XLAT
37、指令执行后指令执行后(AL)=33H,指令执行过程的操作如图所示。,指令执行过程的操作如图所示。指令格式指令格式:LEADEST,SRC操作:将指令中给出的存储器操作数的有效地址操作:将指令中给出的存储器操作数的有效地址(即即地址的偏移量地址的偏移量)送到指定的寄存器中。送到指定的寄存器中。DESTEA受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:LEA指令是将源操作数的偏移地址,即有效地指令是将源操作数的偏移地址,即有效地址传送到目标操作数中。源操作数必须是一个存储器址传送到目标操作数中。源操作数必须是一个存储器操作数,即操作数,即SRC是除立即数和寄存器外的任意一种寻是除立即
38、数和寄存器外的任意一种寻址方式,目标操作数可以是任一址方式,目标操作数可以是任一16位通用寄存器,该位通用寄存器,该指令通常用来建立串操作指令所须的寄存器指针。指令通常用来建立串操作指令所须的寄存器指针。指令格式:指令格式:LDS DEST,SRC操作:完成一个地址指针的传送。地址指针包括数据段的段操作:完成一个地址指针的传送。地址指针包括数据段的段基址和偏移地址。基址和偏移地址。(1)将双字长存储器操作数中的低地址字传送到指定的将双字长存储器操作数中的低地址字传送到指定的寄存器寄存器DEST中。中。(2)将双字长存储器操作数中的高地址字传送到将双字长存储器操作数中的高地址字传送到DS寄存寄存
39、器中。器中。DEST(EA),DS(EA+2)受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:LDS是将是将SRC指出的连续两个字的内容,即一个指出的连续两个字的内容,即一个32位的指针变量传送到一对位的指针变量传送到一对16位的目标寄存器中。高位字为段位的目标寄存器中。高位字为段基址,基址,LDS指令将其传送到数据段寄存器指令将其传送到数据段寄存器DS中,低位字为偏中,低位字为偏移地址,传送到由移地址,传送到由DEST指出的一个通用寄存器,指针寄存器指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器或变址寄存器中,但不能是段寄存器指令格式指令格式:LESDEST,S
40、RC操作:完成一个地址指针的传送。地址指针包括附加段的段操作:完成一个地址指针的传送。地址指针包括附加段的段基址和偏移地址。基址和偏移地址。(1)将双字长存储器操作数中的低地址字传送到指定的寄将双字长存储器操作数中的低地址字传送到指定的寄存器存器DEST中。中。(2)将双字长存储器操作数中的高地址字传送到将双字长存储器操作数中的高地址字传送到ES寄存寄存器中。器中。DEST(EA),ES(EA+2)受影响的状态标志位:没有受影响的状态标志位:没有说明:说明:LES是将是将SRC指出的连续两个字的内容,即一个指出的连续两个字的内容,即一个32位位的指针变量传送到一对的指针变量传送到一对16位的目
41、标寄存器中。高位字为段基址,位的目标寄存器中。高位字为段基址,LES指令将其传送到附加段寄存器指令将其传送到附加段寄存器ES中,低位字为偏移地址,中,低位字为偏移地址,传送到由传送到由DEST指出的一个通用寄存器,指针寄存器或变址寄指出的一个通用寄存器,指针寄存器或变址寄存器中,但不能是段寄存器。存器中,但不能是段寄存器。指令格式:指令格式:LAHF操作:标志寄存器低操作:标志寄存器低8 位的状态标志位填写在位的状态标志位填写在AH寄寄存器的相应位中。存器的相应位中。AHSF:ZF:AF:PF:CF 受影响的状受影响的状态标志位:没有态标志位:没有说明:此指令在说明:此指令在80 x86中几乎
42、无用,主要是为了保证中几乎无用,主要是为了保证与与8080/8085向下兼容,才保留了该指令。向下兼容,才保留了该指令。指令汇编格式指令汇编格式:SAHF操作操作:将将AH寄存器中的相应位传送到状态标志寄存寄存器中的相应位传送到状态标志寄存器相应位中。器相应位中。SF:ZF:AF:PF:CFAH受影响的状态标志位:受影响的状态标志位:SF,ZF,AF,PF,CF说明说明:此指令在此指令在80 x86中几乎无用,主要是为了保证与中几乎无用,主要是为了保证与8080/8085向下兼容,才保留了该指令。向下兼容,才保留了该指令。例例3.14 执行如下指令执行如下指令MOV AH,0CHSAHF 指令
43、执行后指令执行后CF=1,PF=0,AF=0,ZF=1,SF=1指令格式指令格式:PUSHF操作:先将堆栈指针寄存器减操作:先将堆栈指针寄存器减2,然后将标志寄存器,然后将标志寄存器FLAGS中的值存储到栈顶字的对应位中。中的值存储到栈顶字的对应位中。SPSP-2,(SP+1,SP)FLAGS受影响的状态标志位:没有受影响的状态标志位:没有指令格式指令格式:POPF操作:先将位于堆栈栈顶字中的对应位写入标志寄存操作:先将位于堆栈栈顶字中的对应位写入标志寄存器器FLAGS中,然后将堆栈指针寄存器加中,然后将堆栈指针寄存器加2。FLAGS(SP+1,SP),SPSP+2受影响的状态标志位:所有标志
44、位受影响的状态标志位:所有标志位说明:这条指令和说明:这条指令和PUSHF指令一起可以保存和恢复指令一起可以保存和恢复标志寄存器的内容,即保存和恢复各标志位的值。标志寄存器的内容,即保存和恢复各标志位的值。8086/8088提供加减乘和除四种基本算术运算操作。提供加减乘和除四种基本算术运算操作。这些操作都可用于字节或字的运算,也可以用于无符号数这些操作都可用于字节或字的运算,也可以用于无符号数的运算或有符号数的运算,有符号数用补码表示。这样加的运算或有符号数的运算,有符号数用补码表示。这样加减运算指令不再分为无符号数运算指令和有符号数运算指减运算指令不再分为无符号数运算指令和有符号数运算指令,
45、而乘除运算指令还分为无符号数运算指令和有符号数令,而乘除运算指令还分为无符号数运算指令和有符号数运算指令。另外,运算指令。另外,8086/8088还提供了各种十进制算术运算还提供了各种十进制算术运算调整指令。调整指令。指令格式:指令格式:ADDDEST,SRC操作:两个操作数求和,结果存目标操作数中。操作:两个操作数求和,结果存目标操作数中。DEST(DEST)+(SRC)受影响的状态标志位:受影响的状态标志位:OF,SF,ZF,AF,PF,CF说明:(说明:(1)DEST和和SRC不能同时为段寄存器或存不能同时为段寄存器或存储器操作数;储器操作数;(2)两个操作数的类型必须相同。)两个操作数
46、的类型必须相同。例例3.15ADDAL,45H;AL(AL)+45HADD CX,AX;CX(CX)+(AX)ADD AX,BX;AX(AX)+(BX)ADD AL,BL;AL(AL)+(BL)例例3.16 用下面的程序片段再次说明加法指令及其对标志位的影用下面的程序片段再次说明加法指令及其对标志位的影响,说明响,说明8位数据寄存器与位数据寄存器与16位数据寄存器间的关系。为了便于位数据寄存器间的关系。为了便于说明,采用说明,采用16进制的形式表示数据。进制的形式表示数据。MOVAX,7896H ;(AH)=78H,(AL)=96H;各标志位;各标志位不变不变ADDAL,AH ;(AL)=0E
47、H,(AH)=78H;CF=1,ZF=0,SF=0 OF=0,AF=0,PF=0ADD AH,AL ;(AH)=86H,(AL)=0EH;CF=0,ZF=0,SF=1,OF=1,AF=1,PF=0ADD AL,0F2H ;(AL)=00H,(AH)=86H;CF=1,ZF=1,SF=0,OF=0,AF=1,PF=1ADD AX,1234H ;(AH=98),(AL)=34H;CF=0,ZF=0,SF=1,OF=0,AF=0,PF=0指令格式指令格式:ADCDEST,SRC操作操作:两个操作数相加的同时两个操作数相加的同时,再加上再加上CF,结果存入目标操作数中。,结果存入目标操作数中。DEST
48、(DEST)+(SRC)+CF受影响的状态标志位:受影响的状态标志位:OF,SF,ZF,AF,PF,CF说明:说明:ADC指令主要用于多精度数据相加。指令主要用于多精度数据相加。例例3.17 完成完成3字节数据相加字节数据相加:123456H+789ABCH=8ACF12H指令序列如下:指令序列如下:MOV AL,56HMOV AH,34HMOV BL,12HADD AL,0BCHADC AH,9AHADC BL,78H指令格式:指令格式:INCDEST操作:将指定的操作数加操作:将指定的操作数加1,并将结果回送到目标操作数中。并将结果回送到目标操作数中。DEST(DEST)+1受影响的状态标
49、志位:受影响的状态标志位:OF,SF,ZF,AF,PF说明:说明:INC 指令不影响标志指令不影响标志CF,该指令主要用于调整地址,该指令主要用于调整地址指针和计数器。指针和计数器。例例3.18 INCAL;AL(AL)+1 INCBX;BX(BX)+1 INC TABLE;TABLE(TABLE)+1 INC BX;BX(BX)+1指令格式:指令格式:SUBDEST,SRC操作:从目标操作数减去源操作数,结果存入目标操作操作:从目标操作数减去源操作数,结果存入目标操作数中。数中。DEST(DEST)-(SRC)受影响的状态标志位:受影响的状态标志位:OF,SF,ZF,AF,PF,CF说明:(
50、说明:(1)DEST和和SRC不能同时为段寄存器或存储器不能同时为段寄存器或存储器操作数;操作数;(2)两个操作数的类型必须相同。)两个操作数的类型必须相同。例例3.19 SUB AH,12;AH(AH)-12HSUB BX,BP;BX(BX)-(BP)SUB AL,BX;AL(AL)-(BX)SUB BX,VARW ;BX(BX)-VARW,VARW是字变量是字变量例例3.20 用下面的程序片段说明减法指令及其对标志位的影响,说用下面的程序片段说明减法指令及其对标志位的影响,说明明8位数据寄存器与位数据寄存器与16位数据寄存器间的关系。位数据寄存器间的关系。MOVBX,9048H ;(BX)
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。