1、汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 汇编指令格式 寻址方式 8086指令系统 80X86及Pentium扩展指令汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 3.1 3.1 汇编指令格式汇编指令格式 计算机中的一条指令通常包含两部分:依据操作数的个数划分,80X86CPU指令系统中的指令格式最常用的有:双操作数指令、单操作数指令和无操作数指令。操作码操作数操作码操作数汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 1 1、双操作数指令汇编格式及操作规定、双操作数指令汇编格式及操作规定格式:格式:标号:标号:操作符操作符OPDOPD,OPSOPS;注释
2、;注释 操作规定:操作规定:(1 1)OPDOPD与与OPSOPS应为同种操作类型且类型明确,即同为应为同种操作类型且类型明确,即同为字节类型或字类型。字节类型或字类型。(2 2)OPDOPD不能是立即数。不能是立即数。(3 3)OPSOPS和和OPDOPD不能同时为存储器操作数,即:或者是不能同时为存储器操作数,即:或者是OPSOPS和和OPDOPD中至少有一个为寄存器操作数,或者中至少有一个为寄存器操作数,或者是是OPDOPD为存储器操作数,为存储器操作数,OPSOPS为立即数。为立即数。(4 4)操作结束后,运算结果存入)操作结束后,运算结果存入OPDOPD中,中,OPSOPS内容不变。
3、内容不变。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 2 2、单操作数指令汇编格式及操作规定、单操作数指令汇编格式及操作规定格式:格式:标号:标号:操作符操作符OPDOPD;注释;注释 操作规定:操作规定:(1 1)OPDOPD类型必须明确即为字节类型或字类型,不能类型必须明确即为字节类型或字类型,不能是模糊类型。是模糊类型。(2 2)操作对象为目的操作数,操作结束后结果存入)操作对象为目的操作数,操作结束后结果存入OPDOPD中。中。(3 3)OPDOPD不能是立即数,只能是寄存器操作数或存储不能是立即数,只能是寄存器操作数或存储器操作数。器操作数。汇编语言汇编语言淮南师范学院
4、重点课程淮南师范学院重点课程 3 3、无操作数指令汇编格式及操作规定、无操作数指令汇编格式及操作规定格式:格式:标号:标号:操作符操作符;注释;注释 操作规定:操作规定:指令中只有操作码,不含操作数,这指令中只有操作码,不含操作数,这 种指令有两种可能:种指令有两种可能:(1 1)无需任何操作数。如停机指令、空操作指令等。)无需任何操作数。如停机指令、空操作指令等。(2 2)所需操作数是隐含指定的,操作时取固定操作)所需操作数是隐含指定的,操作时取固定操作数进行操作。数进行操作。返回返回汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 3.2 3.2 寻址方式寻址方式 寻找指令中所需操
5、作数存放地址的方式或程序转移时寻找转移地址的方式称为寻址方式,因而寻址方式分为两大类,一类是数据寻址方式,另一类是转移地址寻址方式。由于80X86指令涉及四种操作数:立即操作数、寄存器操作数、存储器操作数和隐含操作数,因此,数据寻址方式又可对应四种寻址方式,即:立即寻址、寄存器寻址、存储器寻址和固定寻址。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程1、立即寻址 此寻址方式所提供的操作数直接包含在指令中,它紧跟在指令操作码后面,存放在存储器代码段中。立即操作数可以是8位,也可以是16位。汇编格式:n (n(n是用是用8 8位或位或1616位二进制补码表示的有符号数位二进制补码表示的有
6、符号数)【例【例3.13.1】MOV AXMOV AX,1234H1234H 立即寻址方式用来表示常数,它常用于给寄存器赋初值。需要强调的是,立即寻址只能用于源操作数,不能用于目的操作数。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程2 2、寄存器寻址、寄存器寻址 此寻址方式的操作数直接存放在由指令指明的寄存器中。此寻址方式的操作数直接存放在由指令指明的寄存器中。在汇编指令中直接书写寄存器名,如在汇编指令中直接书写寄存器名,如1616位寄存器操作数可以位寄存器操作数可以是是AXAX、BXBX、CXCX、DXDX、SISI、DIDI、BPBP、SPSP、DSDS、ESES、SSSS、C
7、SCS等;等;8 8位寄存器操作数可以是位寄存器操作数可以是AHAH、ALAL、BHBH、BLBL、CHCH、CLCL、DHDH、DLDL。汇编格式:汇编格式:R R(其中(其中R R表示寄存器名)表示寄存器名)此寻址方式由于存取操作数直接从此寻址方式由于存取操作数直接从CPUCPU内部寄存器中获得,内部寄存器中获得,不需访问存储器,因而指令执行的速度快。不需访问存储器,因而指令执行的速度快。寄存器寻址既可用于源操作数,又可用于目的操作数,应用寄存器寻址既可用于源操作数,又可用于目的操作数,应用频率高。频率高。【例【例3.23.2】MOV DSMOV DS,AXAX ADD CLADD CL,
8、AH AH 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程3 3、存储器寻址、存储器寻址 存储器寻址方式的操作数都是存放在存储器中,一般是存储器寻址方式的操作数都是存放在存储器中,一般是数据段、附加段、堆栈段中的存储单元。指令中给出的是存数据段、附加段、堆栈段中的存储单元。指令中给出的是存储单元的地址或产生存储单元地址的表达式。在汇编语言源储单元的地址或产生存储单元地址的表达式。在汇编语言源程序中,存储单元地址是采用逻辑地址的形式表示的,即:程序中,存储单元地址是采用逻辑地址的形式表示的,即:段首址:段内偏移地址。段首址存放在某个段寄存器中,段段首址:段内偏移地址。段首址存放在某个段
9、寄存器中,段内偏移地址是指存放操作数的存储单元与段起始地址(段首内偏移地址是指存放操作数的存储单元与段起始地址(段首址)之间的距离(字节数),又可称为址)之间的距离(字节数),又可称为“有效地址有效地址”,记作,记作EAEA。有效地址。有效地址EAEA是由是由3 3个地址分量的某种组合求得,这个地址分量的某种组合求得,这3 3个地个地址分量是:位移量址分量是:位移量 、基址、基址 、变址、变址 。这这3 3个地址分量的不同组合,使形成有效地址个地址分量的不同组合,使形成有效地址EAEA的方法不同,的方法不同,相应有以下相应有以下5 5种不同的存储器操作数寻址方式。种不同的存储器操作数寻址方式。
10、汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(1 1)直接寻址)直接寻址 直接寻址是最简单的存储器寻址,这种寻址,操作数的有效地址直接寻址是最简单的存储器寻址,这种寻址,操作数的有效地址EAEA由指令直接给出。它主要用于存取简单变量。由指令直接给出。它主要用于存取简单变量。汇编格式:(汇编格式:(a a)常量常量 (b b)变量或含有变量的表达式)变量或含有变量的表达式【例【例3.33.3】MOV ALMOV AL,1000H MOV VAL 1000H MOV VAL,BX BX 对使用直接寻址方式需说明以下几点:对使用直接寻址方式需说明以下几点:操作数默认存放在数据段中,段寄存
11、器操作数默认存放在数据段中,段寄存器DSDS在指令格式无须指定。在指令格式无须指定。若操作数在代码段、堆栈段或附加段中,则在指令格式中必须指定相应若操作数在代码段、堆栈段或附加段中,则在指令格式中必须指定相应的段寄存器名。在操作数地址之前使用前缀指出段寄存器名,这种前缀称的段寄存器名。在操作数地址之前使用前缀指出段寄存器名,这种前缀称为段超越前缀。为段超越前缀。指令中操作数的指令中操作数的EAEA即可以是一个数字,也可以是一个符号地址。当即可以是一个数字,也可以是一个符号地址。当EAEA是是一个数字时,一定要注意立即寻址方式与直接寻址方式的区别。一个数字时,一定要注意立即寻址方式与直接寻址方式
12、的区别。直接寻址方式适合于处理存储器的单个存储单元。直接寻址方式适合于处理存储器的单个存储单元。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(2 2)寄存器间接寻址)寄存器间接寻址 此寻址方式中,操作数的有效地址此寻址方式中,操作数的有效地址EAEA存放在存放在SISI、DIDI、BXBX或或BPBP四个寄四个寄存器之一中,即:存器之一中,即:EAEA(BXBX)或()或(BPBP)或()或(SISI)或()或(DIDI)。)。汇编格式:汇编格式:R R (其中(其中R R是寄存器是寄存器SISI、DIDI、BXBX、BPBP之一)之一)SISI、DIDI、BXBX、BPBP在这里
13、叫间址寄存器。若用在这里叫间址寄存器。若用BXBX、SISI或或DIDI间址寻址时,则间址寻址时,则操作数默认在数据段中,且用操作数默认在数据段中,且用DSDS内容作为段首址,操作数的物理地址为:内容作为段首址,操作数的物理地址为:(BXBX)PAPA(DSDS)1616(SISI)(DIDI)【例【例3.43.4】MOV DL MOV DL,BX BX 若指令中使用若指令中使用BPBP间址寻址时,则操作数默认在堆栈段中,且用间址寻址时,则操作数默认在堆栈段中,且用SSSS的内容的内容作为段首址,操作数的物理地址为:作为段首址,操作数的物理地址为:PAPA(SSSS)16 16(BPBP)。)
14、。【例【例3.53.5】MOV BP MOV BP ,AXAX 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 (3 3)基址寻址)基址寻址 此寻址操作数的有效地址此寻址操作数的有效地址EAEA是指令中指定的基址寄存器的内容与指令是指令中指定的基址寄存器的内容与指令中给出的位移量之和,即:中给出的位移量之和,即:EAEA(BXBX)位移量)位移量 (BPBP)汇编格式:(汇编格式:(a a)Disp BX Disp BX 或或Disp BP Disp BP (b b)BX BX Disp Disp 或或 BP BP Disp Disp 该寻址方式中若以该寻址方式中若以BXBX作为基址
15、寄存器,则操作数默认在数据段中;若以作为基址寄存器,则操作数默认在数据段中;若以BPBP作为基址寄存器,则操作数默认在堆栈段中,因而操作数的物理地址为:作为基址寄存器,则操作数默认在堆栈段中,因而操作数的物理地址为:PAPA (DSDS)1616(BXBX)DispDisp (SSSS)1616(BPBP)DispDisp 若操作数不在默认段中,则应使用段超越前缀明确指定。若操作数不在默认段中,则应使用段超越前缀明确指定。【例【例3.63.6】MOV AX MOV AX,BX+7CH BX+7CH MOV AX MOV AX,BP+COUNT BP+COUNT 汇编语言汇编语言淮南师范学院重点
16、课程淮南师范学院重点课程(4 4)变址寻址)变址寻址 变址寻址与基址寻址类似,其操作数的有效地址变址寻址与基址寻址类似,其操作数的有效地址EAEA是变址寄存器的内是变址寄存器的内容与位移量之和,即:容与位移量之和,即:EAEA(SISI)位移量)位移量 (DIDI)汇编格式:(汇编格式:(a a)Disp SI Disp SI 或或Disp DI Disp DI (b b)SI SI Disp Disp 或或 DI DI Disp Disp 该寻址方式默认段是数据段,因而操作数的物理地址为:该寻址方式默认段是数据段,因而操作数的物理地址为:PA PA(DSDS)1616(SISI)Disp D
17、isp (DIDI)若操作数不在默认段中,则应使用段超越前缀明确指定。若操作数不在默认段中,则应使用段超越前缀明确指定。【例【例3.73.7】MOV DX MOV DX,COUNT DI COUNT DI MOV ES MOV ES:3480H SI 3480H SI,AXAX 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(5 5)基址加变址寻址)基址加变址寻址 此寻址方式中操作数的有效地址此寻址方式中操作数的有效地址EAEA是指令中的基址寄存器的内容、变址是指令中的基址寄存器的内容、变址寄存器的内容、位移量三个地址分量之和,即:寄存器的内容、位移量三个地址分量之和,即:EAEA(
18、BXBX)()(SISI)位移量)位移量 (BPBP)()(DIDI)汇编格式:(汇编格式:(a a)Disp BX Disp BX 或或BPBPSISI或或DI DI (b b)BX BX或或BP BP SISI或或DIDIDisp Disp 该寻址方式中若基址寄存器采用该寻址方式中若基址寄存器采用BXBX,则操作数默认在数据段中;,则操作数默认在数据段中;若基址寄存器采用若基址寄存器采用BPBP,则操作数默认在堆栈段中,因而操作数的物理,则操作数默认在堆栈段中,因而操作数的物理 地址为:地址为:PA PA (DSDS)1616(BXBX)()(SISI)DispDisp (DIDI)(SS
19、SS)1616(BPBP)()(SISI)DispDisp (DIDI)汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程4 4、80X8680X86扩充的寻址方式扩充的寻址方式 上述讲的上述讲的8 8种种8086CPU8086CPU的的1616位寻址方式同样适用于位寻址方式同样适用于80X86CPU3280X86CPU32位寻位寻址方式,在这址方式,在这8 8种种3232位寻址方式中,只不过是立即数、寄存器、存储器位寻址方式中,只不过是立即数、寄存器、存储器有效地址扩充到有效地址扩充到3232位,而且任意位,而且任意3232位通用寄存器(位通用寄存器(EAXEAX、EBXEBX、ECX
20、ECX、EDXEDX、ESIESI、EDIEDI、EBPEBP、ESPESP)均可作为间址寄存器、基址寄存器或变址)均可作为间址寄存器、基址寄存器或变址寄存器(变址寄存器寄存器(变址寄存器ESPESP除外)。除外)。除此之外,除此之外,80X86CPU3280X86CPU32位寻址方式还提供了两种仅适用于位寻址方式还提供了两种仅适用于3232位位CPUCPU的寻的寻址方式,即:比例变址寻址和基址加比例变址寻址,这两种寻址方式址方式,即:比例变址寻址和基址加比例变址寻址,这两种寻址方式均属于存储器寻址方式中的一种,其操作数存放在存储器中。均属于存储器寻址方式中的一种,其操作数存放在存储器中。(1
21、)(1)比例变址寻址比例变址寻址 由变址寄存器的内容乘以比例因子再加上位移量而得到操作数有效由变址寄存器的内容乘以比例因子再加上位移量而得到操作数有效地址地址EAEA的寻址方式称为比例变址寻址,的寻址方式称为比例变址寻址,即:即:EAEA 变址寄存器变址寄存器 比例因子位移量。比例因子位移量。汇编格式:汇编格式:变址寄存器变址寄存器 比例因子位移量比例因子位移量汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 其中:变址寄存器是其中:变址寄存器是EAXEAX、EBXEBX、ECXECX、EDXEDX、ESIESI、EDIEDI、EBPEBP之一;之一;比例因子可以是比例因子可以是1 1
22、、2 2、4 4、8 8;位移量可以是;位移量可以是0 0位、位、8 8位或位或3232位。位。此寻址方式操作数默认在数据段,若操作数不在默认的数据段中时,此寻址方式操作数默认在数据段,若操作数不在默认的数据段中时,则应使用段超越前缀明确指定。则应使用段超越前缀明确指定。例如:例如:MOVMOVEAXEAX,COUNT EDICOUNT EDI*2 2;COUNTCOUNT是位移量,是位移量,2 2是比例因子是比例因子其中乘以比例因子的操作是在其中乘以比例因子的操作是在CPUCPU内部由硬件完成。内部由硬件完成。(2)(2)基址加比例变址寻址基址加比例变址寻址 由变址寄存器的内容乘以比例因子加
23、上基址寄存器的内容再加上位由变址寄存器的内容乘以比例因子加上基址寄存器的内容再加上位移量而得到操作数有效地址移量而得到操作数有效地址EAEA的寻址方式称为基址加比例变址寻址。的寻址方式称为基址加比例变址寻址。即:即:EAEA 变址寄存器变址寄存器 比例因子比例因子 基址寄存器基址寄存器 位移量。位移量。若基址寄存器采用若基址寄存器采用EBPEBP、ESPESP时,则操作数默认在时,则操作数默认在SSSS段中,若基址寄存段中,若基址寄存器采用除器采用除EBPEBP、ESPESP以外的其他寄存器时,则操作数默认在以外的其他寄存器时,则操作数默认在DSDS段中。若段中。若操作数不在相应的默认段中时,
24、则应使用段超越前缀明确指定。操作数不在相应的默认段中时,则应使用段超越前缀明确指定。例如:例如:MOVMOV ESI ESI*4 4EDX EDX,EAXEAX ;目的操作数在;目的操作数在DSDS段中段中 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程5 5、转移地址寻址方式、转移地址寻址方式 转移地址寻址方式确定的是转移指令或调用指令转移后的地址。转移地址寻址方式确定的是转移指令或调用指令转移后的地址。可将转移地址寻址方式分为四种:段内直接寻址、段内间接寻址、段可将转移地址寻址方式分为四种:段内直接寻址、段内间接寻址、段间直接寻址和段间间接寻址。间直接寻址和段间间接寻址。(1)(
25、1)段内直接寻址段内直接寻址 段内直接寻址又称为段内相对寻址。在此寻址方式下,转移后的指令段内直接寻址又称为段内相对寻址。在此寻址方式下,转移后的指令与转移指令本身在同一代码段中。转移后指令的有效地址与转移指令本身在同一代码段中。转移后指令的有效地址EAEA(IPIP)位移量。若位移量为正,则相对本指令向后转移,若为负,则相对本指位移量。若位移量为正,则相对本指令向后转移,若为负,则相对本指令向前转移。令向前转移。汇编格式:(汇编格式:(a a)SHORTSHORT标号标号 (b b)NEARNEARPTRPTR标号其中:标号是符号地址。标号其中:标号是符号地址。例如:例如:JMPJMPSHO
26、RTSHORTNEXTNEXTJMPJMPNEARNEARPTRPTRL1L1 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(2)(2)段内间接寻址段内间接寻址 转移有效地址是一个字寄存器或是一个字存储单元的内容。这个字转移有效地址是一个字寄存器或是一个字存储单元的内容。这个字寄存器或字存储单元的内容可以用数据寻址方式中的寄存器寻址或存储寄存器或字存储单元的内容可以用数据寻址方式中的寄存器寻址或存储器寻址获得,所得到的转移有效地址用来取代当前的器寻址获得,所得到的转移有效地址用来取代当前的IPIP值实现段内间接值实现段内间接寻址。这种寻址方式只适用于寻址。这种寻址方式只适用于JMP
27、JMP和和CALLCALL指令。指令。汇编格式:(汇编格式:(a a)R R(R R为为1616位通用寄存器)位通用寄存器)(b)(b)存储器寻址方式之一存储器寻址方式之一 若若JMPJMP和和CALLCALL指令采用格式(指令采用格式(a a),即寄存器寻址,则指令中指定的寄),即寄存器寻址,则指令中指定的寄存器内容便是转移地址,当存器内容便是转移地址,当CPUCPU执行执行JMPJMP或或CALLCALL指令时,就将该寄存器的指令时,就将该寄存器的内容装入内容装入IPIP。若若JMPJMP和和CALLCALL指令采用格式(指令采用格式(b b)中的一种存储器寻址时,则转移地址便)中的一种存
28、储器寻址时,则转移地址便是字存储单元的内容,当是字存储单元的内容,当CPUCPU执行执行JMPJMP或或CALLCALL指令时,就将该字存储单元指令时,就将该字存储单元的内容装入的内容装入IPIP。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(3)(3)段间直接寻址段间直接寻址此寻址方式,转移后的指令与转移指令本身不在同一代码段中。转此寻址方式,转移后的指令与转移指令本身不在同一代码段中。转移地址(即移地址(即IPIP和和CSCS值)由指令直接给出。值)由指令直接给出。汇编格式:汇编格式:FARFARPTRPTR标号标号它只适用于它只适用于JMPJMP和和CALLCALL指令。例如
29、:指令。例如:JMPJMPL2L2(标号(标号L2L2与本与本JMPJMP指令不指令不在同一代码段中)。在同一代码段中)。(4 4)段间间接寻址)段间间接寻址此寻址方式也只适用于此寻址方式也只适用于JMPJMP和和CALLCALL指令。转移后的指令与转移指令本指令。转移后的指令与转移指令本身不在同一代码段中。转移地址(即身不在同一代码段中。转移地址(即IPIP和和CSCS值)由采用存储器寻址方式值)由采用存储器寻址方式之一确定的双字存储单元内容间接给出。之一确定的双字存储单元内容间接给出。汇编格式:存储器寻址方式之一汇编格式:存储器寻址方式之一执行执行JMPJMP或或CALLCALL指令时,根
30、据指令中指定的某种存储器寻址方式找到指令时,根据指令中指定的某种存储器寻址方式找到内存的一个双字(内存的一个双字(3232位),将高字内容装入位),将高字内容装入CSCS,将低字内容装入,将低字内容装入IPIP,实,实现段间转移。现段间转移。例如:例如:JMPJMPDWORDDWORDPTR BX PTR BX 返回返回汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 3.3 80863.3 8086指令系统指令系统 80868086指令系统按功能可分为六大类:指令系统按功能可分为六大类:(1 1)数据传送类指令()数据传送类指令(2 2)算术运算类指令)算术运算类指令(3 3)位操作
31、指令()位操作指令(4 4)串操作指令)串操作指令(5 5)控制转移指令()控制转移指令(6 6)处理器控制指令)处理器控制指令80868086指令按操作数个数可划分为三种类型:指令按操作数个数可划分为三种类型:(1 1)双操作数指令()双操作数指令(2 2)单操作数指令()单操作数指令(3 3)无操作数指令)无操作数指令学习汇编指令应从以下几方面着重理解掌握:学习汇编指令应从以下几方面着重理解掌握:(1 1)学习指令格式;)学习指令格式;(2 2)掌握指令中操作数的寻址方式及寻址方式的搭配规则;)掌握指令中操作数的寻址方式及寻址方式的搭配规则;(3 3)掌握指令的功能及指令执行后对条件码的影
32、响;)掌握指令的功能及指令执行后对条件码的影响;(4 4)学习如何正确运用指令。)学习如何正确运用指令。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 一、一、数据传送指令 1 1通用数据传送指令通用数据传送指令 (1 1)传送指令)传送指令MOVMOV格式:格式:MOVMOVOPDOPD,OPSOPS功能:把源操作数传送到目的操作数。即:功能:把源操作数传送到目的操作数。即:OPDOPD(OPSOPS)说明:说明:源操作数和目的操作数的操作类型必须明确且一致;当指令中只有一源操作数和目的操作数的操作类型必须明确且一致;当指令中只有一个操作数的类型明确时,另一个操作数被视为同一类型;
33、当两操作数类型个操作数的类型明确时,另一个操作数被视为同一类型;当两操作数类型均不明确时,必须用均不明确时,必须用“BYTE“BYTEPTR”PTR”或或“WORD“WORDPTR”PTR”将一个存储器操作数将一个存储器操作数定义为字节或字类型。定义为字节或字类型。指令执行后,源操作数内容不变。指令执行后,源操作数内容不变。指令执行后,对标志寄存器各位无影响。指令执行后,对标志寄存器各位无影响。源操作数可以是通用寄存器、段寄存器、存储器和立即数;目的操作源操作数可以是通用寄存器、段寄存器、存储器和立即数;目的操作数也可以是通用寄存器、段寄存器、存储器,但立即数、数也可以是通用寄存器、段寄存器、
34、存储器,但立即数、CSCS段寄存器不能段寄存器不能作为目的操作数。源操作数和目的操作数不能同时为存储器操作数。作为目的操作数。源操作数和目的操作数不能同时为存储器操作数。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程用一条用一条MOVMOV指令能实现:指令能实现:(a)(a)立即数传送到通用寄存器或存储单元立即数传送到通用寄存器或存储单元 如如MOVMOVDLDL,a a 、MOV MOVAXAX,1FA4H1FA4H (b)(b)寄存器之间的传送寄存器之间的传送 如如MOVMOVAXAX,BXBX、MOV MOVALAL,DHDH、MOV MOVDSDS,AXAX(c)(c)寄存器
35、与存储单元之间的传送寄存器与存储单元之间的传送 如如MOVMOVDLDL,BUFBYTEBUFBYTE MOV WORD PTR BX+SI MOV WORD PTR BX+SI,AXAX 由于由于MOVMOV指令中只允许一个操作数在存储器中,因此用一条指令中只允许一个操作数在存储器中,因此用一条MOVMOV指令无指令无法完成两个存储单元之间的数据传送,但可以用二条指令来实现。法完成两个存储单元之间的数据传送,但可以用二条指令来实现。【例【例3.93.9】把把BUFWORD1BUFWORD1字单元内容传送到字单元内容传送到BUFWORD2BUFWORD2字单元中,可用以字单元中,可用以 下指令
36、完成:下指令完成:MOV AX MOV AX,BUFWORD1BUFWORD1 MOV BUFWORD2 MOV BUFWORD2,AXAX 汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 (2)(2)交换指令交换指令XCHGXCHG 格式:格式:XCHGXCHGOPDOPD,OPSOPS 功能:源操作数和目的操作数的内容相互交换。功能:源操作数和目的操作数的内容相互交换。即:(即:(OPDOPD)(OPSOPS)说明:该指令与说明:该指令与MOVMOV指令相似,但在功能上有两点区别,指令相似,但在功能上有两点区别,其一,该指令不允许使用立即数和段寄存器作为操作数;其一,该指令不允许
37、使用立即数和段寄存器作为操作数;其二,该指令改变源操作数的内容。其二,该指令改变源操作数的内容。(3 3)查表转换指令)查表转换指令XLATXLAT 格式:格式:XLATXLAT或或XLATXLATOPSOPS 功能:将(功能:将(BXBX)为首址()为首址(ALAL)为位移量的字节存储单元中的数据)为位移量的字节存储单元中的数据 传送到传送到ALAL中。即:中。即:AL(BXAL(BXAL)AL)字节字节汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 2 2地址传送指令地址传送指令 地址传送指令主要用于将存储器操作数地址(偏移地址、地址传送指令主要用于将存储器操作数地址(偏移地址、
38、段地址)传送给指定的寄存器。它包括段地址)传送给指定的寄存器。它包括3 3条指令:条指令:LEALEA、LDSLDS和和LESLES。(1 1)传送有效地址指令)传送有效地址指令LEALEA 格式:格式:LEALEAREG16REG16,OPSOPS 功能:将源操作数的有效地址功能:将源操作数的有效地址EAEA传送给目的操作数指定的传送给目的操作数指定的1616 位通用寄存器。位通用寄存器。说明:说明:源操作数必须是存储器操作数,即源操作数必须是存储器操作数,即OPSOPS采用存储器寻址;采用存储器寻址;目的操作数必须是一个目的操作数必须是一个1616位通用寄存器。位通用寄存器。本指令对标志位
39、无影响。本指令对标志位无影响。该指令通常用来建立内存储器的寄存器指针。该指令通常用来建立内存储器的寄存器指针。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程(2 2)传送偏移地址及数据段首址指令)传送偏移地址及数据段首址指令LDSLDS 格式:格式:LDSLDSREG16REG16,OPSOPS 功能:将由源操作数确定的双字存储单元的内容传送给功能:将由源操作数确定的双字存储单元的内容传送给DSDS及目的操及目的操 作数指定的作数指定的1616位通用寄存器中,其中高字单元的内容送给位通用寄存器中,其中高字单元的内容送给 DS DS,低字单元的内容送给,低字单元的内容送给REG16RE
40、G16。说明:源操作数必须是双字存储器操作数,即:说明:源操作数必须是双字存储器操作数,即:OPSOPS采用存储器采用存储器 寻址,寻找到相继寻址,寻找到相继4 4个字节的存储单元,低字单元中存放个字节的存储单元,低字单元中存放 偏偏移地址,高字单元中存放段首地址;目的操作数必须是移地址,高字单元中存放段首地址;目的操作数必须是 一一个个1616位通用寄存器,通常特定为位通用寄存器,通常特定为SISI。本指令不影响标志位。本指令不影响标志位。(3 3)传送偏移地址及附加段首址指令)传送偏移地址及附加段首址指令LESLES 格式:格式:LESLESREG16REG16,OPSOPS 功能:将由源
41、操作数确定的双字存储单元的内容传送给功能:将由源操作数确定的双字存储单元的内容传送给ESES及目的操及目的操 作数指定的作数指定的1616位通用寄存器中,其中高字单元的内容送给位通用寄存器中,其中高字单元的内容送给 ES ES,低字单元的内容送给,低字单元的内容送给REG16REG16。说明:同说明:同LDSLDS指令。指令。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 3 3标志位传送指令标志位传送指令 标志位传送指令有标志位传送指令有4 4条指令,即:条指令,即:LAHFLAHF、SAHFSAHF、PUSHFPUSHF和和POPFPOPF。(1 1)标志送)标志送AHAH指令指
42、令LAHFLAHF 格式:格式:LAHFLAHF 功能:将标志寄存器低功能:将标志寄存器低8 8位的内容送入位的内容送入AHAH寄存器。寄存器。即:即:AH(FLAGS)AH(FLAGS)7-07-0,该指令的执行不影响标志位。该指令的执行不影响标志位。(2 2)AHAH标志送指令标志送指令SAHFSAHF 格式:格式:SAHFSAHF 功能:将功能:将AHAH寄存器的内容送入标志寄存器低寄存器的内容送入标志寄存器低8 8位,高位,高8 8位保持不变。位保持不变。该指令用于设置或恢复该指令用于设置或恢复SFSF、ZFZF、AFAF、PFPF、CFCF五个标志位,五个标志位,该指令的执行只影响标
43、志寄存器的低该指令的执行只影响标志寄存器的低8 8位,对高位,对高8 8位(即位(即OFOF、DF DF、IFIF、TFTF)标志位无影响。)标志位无影响。从指令的功能上可看出,从指令的功能上可看出,SAHFSAHF和和LAHFLAHF为互逆过程。为互逆过程。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 (3 3)标志进栈指令)标志进栈指令PUSHFPUSHF 格式:格式:PUSHFPUSHF 功能:将标志寄存器的内容压入堆栈。功能:将标志寄存器的内容压入堆栈。(4 4)标志出栈指令)标志出栈指令POPFPOPF 格式:格式:POPFPOPF 功能:将栈顶字单元内容弹出到标志寄存器
44、中。功能:将栈顶字单元内容弹出到标志寄存器中。该指令的执行影响标志位。该指令的执行影响标志位。PUSHF PUSHF和和POPFPOPF互为逆过程。互为逆过程。标志位传送指令中标志位传送指令中SAHFSAHF和和POPFPOPF指令将直接影响标志寄存器的内指令将直接影响标志寄存器的内容。利用这一特性,可以方便地改变标志寄存器中指定位的状态容。利用这一特性,可以方便地改变标志寄存器中指定位的状态.数据传送类指令还包括输入数据传送类指令还包括输入/输出专用指令,在输出专用指令,在PCPC机里所有机里所有I/OI/O端口与端口与CPUCPU之间的通信都由之间的通信都由ININ和和OUTOUT指令实现
45、,由指令实现,由ININ指令完成从指令完成从I/OI/O端端口到口到CPUCPU的信息传送,由的信息传送,由OUTOUT指令完成从指令完成从CPUCPU到到I/OI/O端口的信息传送端口的信息传送。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 二、二、算术运算指令 算术运算指令用来执行加、减、乘、除四则运算。它包括无符号数、有符算术运算指令用来执行加、减、乘、除四则运算。它包括无符号数、有符号数的二进制算术运算指令和十进制算术运算调整指令。号数的二进制算术运算指令和十进制算术运算调整指令。1 1二进制数算术运算指令二进制数算术运算指令 (1 1)加法运算指令)加法运算指令加法运算指
46、令包括加法运算指令包括ADDADD、ADCADC的的INCINC三条指令。三条指令。加法指令加法指令ADDADD 格式:格式:ADDADDOPDOPD,OPSOPS 功能:将目的操作数与源操作数相加,结果存入目的地址中,而源功能:将目的操作数与源操作数相加,结果存入目的地址中,而源 操作数不变。即:操作数不变。即:OPDOPD(OPDOPD)()(OPSOPS)。)。说明:该指令的源操作数或在通用寄存器或在存储单元中,也可以是立说明:该指令的源操作数或在通用寄存器或在存储单元中,也可以是立即数,而目的操作数只能在通用寄存器或存储单元中,不能是立即数,即数,而目的操作数只能在通用寄存器或存储单元
47、中,不能是立即数,且两操作数不能同时为存储器操作数;操作数可以是字节或字,且两操且两操作数不能同时为存储器操作数;操作数可以是字节或字,且两操作数的类型明确并一致。该指令相加后,根据得到的结果设置标志寄存作数的类型明确并一致。该指令相加后,根据得到的结果设置标志寄存器的器的OFOF、SFSF、ZFZF、CFCF、AFAF和和PFPF标志位。标志位。ADD ADD指令执行后对标志位的影响及作用如下,这里我们只重点说明指令执行后对标志位的影响及作用如下,这里我们只重点说明OFOF、CFCF、SFSF和和ZFZF四个标志位。四个标志位。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 OF:
48、OF:当两个有符号数相加时,若两个操作数的符号相同,而结当两个有符号数相加时,若两个操作数的符号相同,而结 果的符号与之相反,则果的符号与之相反,则OFOF1 1,否则,其余情况,否则,其余情况OFOF0 0。当当OFOF1 1时,说明两个有符号数相加产生了溢出,即和的时,说明两个有符号数相加产生了溢出,即和的 值超出了有符号数的有效范围。在把操作数视为有符号数值超出了有符号数的有效范围。在把操作数视为有符号数 时,可通过该标志了解加法结果是否正确。时,可通过该标志了解加法结果是否正确。CF:CF:运算过程中当最高位产生进位时,则运算过程中当最高位产生进位时,则CFCF1 1,否则,否则,CF
49、CF0 0。当当CFCF1 1时,说明运算结果超出了无符号数的表示范围。时,说明运算结果超出了无符号数的表示范围。在把操作数视为无符号数时,可通过该标志了解加法结果在把操作数视为无符号数时,可通过该标志了解加法结果 是否正确。是否正确。SF:SF:运算结果的最高位为运算结果的最高位为1 1,则,则SFSF1 1,否则,否则,SFSF0 0。ZF:ZF:运算结果为零时,则运算结果为零时,则ZFZF1 1;否则,;否则,ZFZF0 0。汇编语言汇编语言淮南师范学院重点课程淮南师范学院重点课程 带进位加法指令带进位加法指令ADCADC 格式:格式:ADCADCOPDOPD,OPSOPS 功能:与功能
50、:与ADDADD指令基本相同,惟一区别是将该指令执行前的指令基本相同,惟一区别是将该指令执行前的CFCF值值 加至目的操作数中。即:加至目的操作数中。即:OPDOPD(OPDOPD)()(OPSOPS)CFCF 说明:该指令与说明:该指令与ADDADD指令在功能上及结果对标志位影响上基本相指令在功能上及结果对标志位影响上基本相 同。该指令主要用于多字节的加法运算。同。该指令主要用于多字节的加法运算。加加1 1指令指令INCINC 格式:格式:INCINCOPDOPD 功能:将目的操作数加功能:将目的操作数加1 1后送回目的地址中,并根据执行结果设后送回目的地址中,并根据执行结果设 置标志位置标