第三章 80486微处理器指令系统_第1页
第三章 80486微处理器指令系统_第2页
第三章 80486微处理器指令系统_第3页
第三章 80486微处理器指令系统_第4页
第三章 80486微处理器指令系统_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 8048680486微处理器指令系统微处理器指令系统 第一节第一节8048680486微处理器寻址方式微处理器寻址方式 第二节第二节 8048680486微处理器指令系统微处理器指令系统 第一节第一节8048680486微处理器的寻址方式微处理器的寻址方式 一、操作数寻址方式一、操作数寻址方式 要使微处理器能够完成指令规定的操作,则指令中须包含要使微处理器能够完成指令规定的操作,则指令中须包含2 2种信种信 息,一是执行什么操作,二是该操作所涉及的数据在哪里和结果存息,一是执行什么操作,二是该操作所涉及的数据在哪里和结果存 于何处,而于何处,而寻找操作数所在地址寻找操作数所在地址

2、的方法即为的方法即为寻址方式寻址方式(Addressing (Addressing Mode)Mode)。80X8680X86的寻址方式可分为两类:的寻址方式可分为两类:操作数的寻址方式操作数的寻址方式和和转移地转移地 址的寻址方式址的寻址方式。 由于由于操作数操作数作为指令的操作对象,作为指令的操作对象,可以存储在存储器中可以存储在存储器中(称为存(称为存 储器操作数)、储器操作数)、寄存在寄存器中寄存在寄存器中(称为寄存器操作数)或(称为寄存器操作数)或直接包含在直接包含在 指令中指令中(称为立即数),因此,与之对应有多种寻址方式。(称为立即数),因此,与之对应有多种寻址方式。80X868

3、0X86粗粗 略地划分可有略地划分可有3 3类类1010种寻址方式种寻址方式,其中访问存储器操作数有,其中访问存储器操作数有8 8种寻址方种寻址方 式。式。 (1 1)立即数寻址)立即数寻址 在这种寻址的方式下,操作数作为立即数直接存在指令中,可为在这种寻址的方式下,操作数作为立即数直接存在指令中,可为 8 8位,位,1616位和位和3232位。位。 例:例: MOV AXMOV AX,1234H1234H MOV BL MOV BL,78H78H MOV ECX MOV ECX,12345678H12345678H 以第一条指令为例的立即以第一条指令为例的立即 数寻址方式的执行过程如图。数寻

4、址方式的执行过程如图。 立即寻址示意图立即寻址示意图 (2 2)寄存器寻址)寄存器寻址 在这种方式下,操作数存放在在这种方式下,操作数存放在CPUCPU某个某个8 8位、位、1616位或位或32 32 位寄存器中。位寄存器中。 例:例: MOV EAXMOV EAX,EDXEDX INC CL INC CL MOV DS MOV DS,AXAX 该寻址方式指令码短,且无需从存储该寻址方式指令码短,且无需从存储 器取操作数,故执行速度快器取操作数,故执行速度快 (3 3)直接寻址)直接寻址 在这种方式下,指令中的操作在这种方式下,指令中的操作 数部分直接给出了操作数的有效地数部分直接给出了操作数

5、的有效地 址址EAEA,它和操作码一起放在存储器,它和操作码一起放在存储器 的代码段中,可以是的代码段中,可以是1616位或位或3232位整位整 数。但操作数一般在数据段数。但操作数一般在数据段DSDS中。中。 例:例:MOV AXMOV AX,DSDS:1000H1000H ;将;将DSDS段中段中1000H1000H和和1001H1001H单元单元 的内容送到的内容送到AXAX中。中。 应注意的是,指令中的应注意的是,指令中的DSDS不能省略。不能省略。 直接寻址示意图直接寻址示意图 (4 4)寄存器间接寻址)寄存器间接寻址 这种寻址方式下,操作数所在内存单元的这种寻址方式下,操作数所在内

6、存单元的EAEA由规定的寄存器指出。由规定的寄存器指出。 如果操作数不在上述规定的默认段,而是在其他的段,则必如果操作数不在上述规定的默认段,而是在其他的段,则必 须在指令中相应的操作数前加上须在指令中相应的操作数前加上段超越前缀段超越前缀。例如:。例如: MOV AXMOV AX,ESES:SISI MOV AXMOV AX,DSDS:BPBP 1616位寻址时,位寻址时,EAEA可以由可以由SISI,DIDI,BPBP或或BXBX提供。提供。 若以若以SISI,DIDI,BXBX间接寻址,则默认操作数在间接寻址,则默认操作数在DSDS段中。段中。 若以若以BPBP间接寻址,则默认操作数在间

7、接寻址,则默认操作数在SSSS段中。段中。 32 32位寻址时,位寻址时,8 8个个3232位通用寄存器均可作间址寄存器。位通用寄存器均可作间址寄存器。除除ESPESP, EBPEBP默认段寄存器为默认段寄存器为SSSS外,其余外,其余6 6个通用寄存器均默认段寄存器为个通用寄存器均默认段寄存器为DSDS。 (5 5)寄存器相对寻址方式)寄存器相对寻址方式 在这种方式中,操作数所在内存单元的有效地址为规定的基址寄存器在这种方式中,操作数所在内存单元的有效地址为规定的基址寄存器 或变址寄存器的内容与一个常量(即位移量)之和。或变址寄存器的内容与一个常量(即位移量)之和。 1616位寻址时,位寻址

8、时,BXBX和和BPBP作为基址寄存器,作为基址寄存器,BXBX默认默认DSDS为段寄存器,为段寄存器,BPBP默认默认SSSS为段为段 寄存器;寄存器;SISI和和DIDI作为变址寄存器,默认作为变址寄存器,默认DSDS为段寄存器。为段寄存器。位移量可以为位移量可以为8 8位或位或1616位。位。 3232位寻址时,位寻址时,8 8个个3232位通用寄存器均可作基址位通用寄存器均可作基址/ /变址寄存器,变址寄存器,其中其中ESPESP、 EBPEBP以以SSSS为默认段寄存器,其余为默认段寄存器,其余6 6个通用寄存器均以个通用寄存器均以DSDS为默认段寄存器。为默认段寄存器。位位 移量可

9、以为移量可以为8 8位或位或3232位。位。 例如:例如: MOV EAXMOV EAX,BX+24 BX+24 ;也可以写成;也可以写成 MOV EAXMOV EAX,24BX24BX MOV DX MOV DX ,EAX+1500EAX+1500;也可以写成;也可以写成 MOV DXMOV DX,1500EAX1500EAX 在指令格式中,地址表达式写成:在指令格式中,地址表达式写成: 段寄存器:段寄存器: 基址寄存器基址寄存器 / / 变址寄存器变址寄存器 + + 位移量位移量 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器基址寄存器 / / 变址寄存器变址寄存器 (6 6)基址变

10、址寻址方式)基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。 在指令格式中,地址表达式写成:在指令格式中,地址表达式写成: 段寄存器:段寄存器: 基址寄存器基址寄存器 + + 变址寄存器变址寄存器 在这种方式中,基址寄存器和变址寄存器都必须是规定的在这种方式中,基址寄存器和变址寄存器都必须是规定的1616位寄存器。位寄存器。 当基址寄存器和变址寄存器默认的段寄存器不同时,一般规定由基址寄存器当基址寄存器和变址寄存器默认的段寄存器不同时,一般规定由基址寄存器 来决定默认哪一个段寄存器作段基址指针。来决定默认

11、哪一个段寄存器作段基址指针。 (7 7)相对基址变址寻址方式)相对基址变址寻址方式 该方式中,操作数所在内存单元的有效地址是一个基址寄存器与该方式中,操作数所在内存单元的有效地址是一个基址寄存器与 一个变址寄存器的内容和一个常量(即位移量)之和。一个变址寄存器的内容和一个常量(即位移量)之和。 在指令格式中,地址表达式写成:在指令格式中,地址表达式写成: 段寄存器:段寄存器: 基址寄存器基址寄存器 / / 变址寄存器变址寄存器 + + 位移量位移量 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器基址寄存器 / / 变址寄存器变址寄存器 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器

12、基址寄存器 变址寄存器变址寄存器 这种寻址方式主要用于二维数组操作和二重循环等。这种寻址方式主要用于二维数组操作和二重循环等。 (8 8)比例变址寻址方式)比例变址寻址方式 这种寻址方式只适合于这种寻址方式只适合于3232位寻址的一种情况。位寻址的一种情况。 MOV EAX TABLEESIMOV EAX TABLEESI* *4 4 ;TABLETABLE是位移量,是位移量,4 4是比例因子是比例因子 操作数的操作数的EAEA是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和。是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和。 在指令格式中,地址表达式写成:在指令格式中,地

13、址表达式写成: 段寄存器:段寄存器: 变址寄存器变址寄存器 比例因子比例因子 位移量位移量 或:段寄存器:位移量或:段寄存器:位移量 变址寄存器变址寄存器 比例因子比例因子 其中比例因子可以是其中比例因子可以是1 1,2 2,4 4,8 8中的任一个数。中的任一个数。除除ESPESP外的任何通用寄外的任何通用寄 存器均可作变址寄存器,且存器均可作变址寄存器,且EBPEBP默认默认SSSS作段寄存器,其余以作段寄存器,其余以DSDS作段寄存器。作段寄存器。 该方式适用于对一维数组的数组元素进行检索操作。位移量表示数组起该方式适用于对一维数组的数组元素进行检索操作。位移量表示数组起 始地址的偏移量

14、,变址表示数组元素的下标,可变。当数组元素大小为始地址的偏移量,变址表示数组元素的下标,可变。当数组元素大小为2 2,4 4, 8 8时,用带比例因子的变址寻址方式更方便、更高效。时,用带比例因子的变址寻址方式更方便、更高效。 (9 9)基址比例变址寻址方式)基址比例变址寻址方式 操作数的操作数的EAEA是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和。是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和。 在指令格式中,地址表达式写成:在指令格式中,地址表达式写成: 段寄存器:段寄存器: 变址寄存器变址寄存器 比例因子比例因子 基址寄存器基址寄存器 或:段寄存器:或:段寄存器:

15、基址寄存器基址寄存器 变址寄存器变址寄存器 比例因子比例因子 (1010)相对基址比例变址寻址方式)相对基址比例变址寻址方式 操作数的操作数的EAEA是变址寄存器的内容乘以比例因子,加上基址寄存器的内是变址寄存器的内容乘以比例因子,加上基址寄存器的内 容,再加上位移量之和。容,再加上位移量之和。 在指令格式中,地址表达式写成:在指令格式中,地址表达式写成: 段寄存器:段寄存器: 基址寄存器基址寄存器 比例因子比例因子 变址寄存器变址寄存器 位移量位移量 或:段寄存器:位移量或:段寄存器:位移量 基址寄存器基址寄存器 比例因子比例因子 变址寄存器变址寄存器 或:段寄存器:位移量或:段寄存器:位移

16、量 基址寄存器基址寄存器 比例因子比例因子 变址寄存器变址寄存器 访存操作类型访存操作类型默认段寄默认段寄 存器存器 允许超越的段寄存允许超越的段寄存 器器 偏移地址寄存器偏移地址寄存器 取指令代码取指令代码CSCS无无(E)IP(E)IP 堆栈操作堆栈操作SSSS无无(E)SP(E)SP 源串数据访问源串数据访问DSDSCS, SS ,ES FS ,GSCS, SS ,ES FS ,GS(E)SI(E)SI 目的串数据访问目的串数据访问ESES无无(E)DI(E)DI 通用数据访问通用数据访问DSDSCS,SS,ES,FS,GSCS,SS,ES,FS,GS偏移地址偏移地址 以(以(E E)B

17、PBP、(、(E E)SPSP 间接寻址的指令间接寻址的指令 SSSSCS,DS,ES,FS,GSCS,DS,ES,FS,GS偏移地址偏移地址 存储器寻址时的段约定存储器寻址时的段约定 若以若以SISI,DIDI,BXBX间接寻址,则默认操作数在间接寻址,则默认操作数在DSDS段中。段中。 若以若以BPBP间接寻址,则默认操作数在间接寻址,则默认操作数在SSSS段中。段中。 ESPESP、EBPEBP以以SSSS为默认段寄存器,其余为默认段寄存器,其余6 6个通用寄存器均以个通用寄存器均以DSDS为默认段寄存器。为默认段寄存器。 二、转移地址寻址方式二、转移地址寻址方式 在指令系统中,有一组指

18、令为在指令系统中,有一组指令为程序转移指令程序转移指令。程序转移指令的寻。程序转移指令的寻 址方式涉及如何址方式涉及如何确定转移的目标地址确定转移的目标地址。目标地址可以在段内,也可以。目标地址可以在段内,也可以 在段外。在段外。 段内直接寻址段内直接寻址 转移的目标地址是当前转移的目标地址是当前IPIP寄存器寄存器的内容和一个的内容和一个8 8位或位或1616位位位移量之和位移量之和。 指令的汇编语言格式表示为:指令的汇编语言格式表示为: JMP NEAR PTR PROGRMJMP NEAR PTR PROGRM JMP SHORT OUTSET JMP SHORT OUTSET 段内间接

19、寻址段内间接寻址 该方式中,转移的目标地址是寄存器或存储单元的内容。寄存器或该方式中,转移的目标地址是寄存器或存储单元的内容。寄存器或 存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方 式取得,所得到的内容将用来取代式取得,所得到的内容将用来取代IPIP寄存器的值。寄存器的值。 段内间接寻址转移指令的汇编格式可以表示为:段内间接寻址转移指令的汇编格式可以表示为: JMP CXJMP CX JMP WORD PTR BX+TAB1JMP WORD PTR BX+TAB1 段间直接寻址段间直接寻址 这种寻址方式用于段间转移

20、,指令中直接这种寻址方式用于段间转移,指令中直接提供了目标地址提供了目标地址的的段基段基 址址和和偏移地址偏移地址,所以,所以, ,只要用只要用指令中指令中指定的指定的偏移地址取代偏移地址取代IPIP寄存器寄存器的内的内 容,用容,用指令中指令中指定的指定的段基址取代段基址取代CSCS寄存器寄存器的内容就完成了从一个段到的内容就完成了从一个段到 另一个段的转移操作,另一个段的转移操作, 指令的汇编语言格式可表示为:指令的汇编语言格式可表示为: JMP FAR PTR NEXTJMP FAR PTR NEXT 段间间接寻址段间间接寻址 该方式下,用存储器中该方式下,用存储器中两个相继字的内容两个

21、相继字的内容来来取代取代IPIP和和CSCS寄存器寄存器中中 的的原始原始内容,以达到内容,以达到段间转移段间转移的目的。这里,存储单元的地址是由指的目的。这里,存储单元的地址是由指 令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。 指令的汇编语言格式可表示为:指令的汇编语言格式可表示为: JMP DWORD PTR REL+BXJMP DWORD PTR REL+BX 第二节第二节 8048680486微处理器指令系统微处理器指令系统 80X86 80X86的指令系统向上兼容,都是在的指令系统向上兼容,都是在8086

22、8086指令的基础上发展形成指令的基础上发展形成 的。与的。与8028680286相比,增加了相比,增加了3232位操作和访问存储器的位操作和访问存储器的3232位寻址方式。位寻址方式。 8048680486可以工作在实模式、保护模式和虚拟可以工作在实模式、保护模式和虚拟8686模式,为了支持系统模式,为了支持系统 工作模式,指令系统中设计了系统管理指令、保护模式控制指令以工作模式,指令系统中设计了系统管理指令、保护模式控制指令以 及高级语言支持指令等等。及高级语言支持指令等等。 8048680486的基本指令的基本指令按功能可分为按功能可分为7 7类类:数据传送指令、算术运算指:数据传送指令

23、、算术运算指 令、逻辑运算指令、字符串操作指令、控制转移指令、处理器控制令、逻辑运算指令、字符串操作指令、控制转移指令、处理器控制 指令和按条件设置字节指令。下面分别给予介绍。指令和按条件设置字节指令。下面分别给予介绍。 指令类型和格式、指令功能、对操作数的要求、指指令类型和格式、指令功能、对操作数的要求、指 令应用条件以及对标志的影响令应用条件以及对标志的影响 一一 、数据传送指令、数据传送指令 1)通用数据传送指令:)通用数据传送指令: 基本传送指令(基本传送指令(MOV) 格式:格式:MOV 目标操作数,源操作数目标操作数,源操作数 例如:例如:MOVBYTE PTR BX,55H ;5

24、5H送给送给BX间址的字节型单元间址的字节型单元 MOVBX,55H ;0055H送给送给BX间址的字型单元间址的字型单元 符号扩展传送指令符号扩展传送指令MOVSX(用于带符号数扩展)(用于带符号数扩展) 格式:格式:MOVSX 目标操作数,源操作数目标操作数,源操作数 例如:例如:MOV DL,-16;DL = F0H MOVSX BX,DL;BX = FFF0H,而,而DH,DL不变不变 零扩展传送指令零扩展传送指令MOVZX (用于无符号数扩展)(用于无符号数扩展) 格式:格式:MOVZX 目标操作数,源操作数目标操作数,源操作数 例如:例如:MOVZX EAX,CX ;将;将CX中中

25、16位数高位加位数高位加0扩展为扩展为32位送入位送入EAX MOVSX和和MOVZX这两条指令常被用于作除法时对被除数位数的扩展。这两条指令常被用于作除法时对被除数位数的扩展。 交换指令交换指令XCHG 格式:格式: XCHG 目标操作数,源操作数目标操作数,源操作数 说明:说明: 源操作数可以是源操作数可以是8位、位、16位或位或32位的立即数、寄存器、段寄存器或存储位的立即数、寄存器、段寄存器或存储 器操作数,目标操作数是与源操作数等长的寄存器、段寄存器(器操作数,目标操作数是与源操作数等长的寄存器、段寄存器(CS除外)除外) 或存储器操作数。或存储器操作数。 源操作数和目标操作数不能同

26、时为存储器操作数。如:源操作数和目标操作数不能同时为存储器操作数。如:MOV BP,SI 是非法指令。是非法指令。 源操作数和目标操作数不能同是段寄存器中,如:源操作数和目标操作数不能同是段寄存器中,如:MOV DS,ES是非是非 法指令。法指令。 立即数不能作为目标操作数。如:立即数不能作为目标操作数。如:MOV 1234H,AX是非法指令。是非法指令。 不能将立即数直接传送到段寄存器,如:不能将立即数直接传送到段寄存器,如:MOV SS,1000H是非法是非法 指令。指令。 当目标操作数为非直接寻址的存储器操作数时,如源操作数是单字节当目标操作数为非直接寻址的存储器操作数时,如源操作数是单

27、字节 的立即数,则应用的立即数,则应用PTR运算符说明目标操作数的属性,否则将被默认为字运算符说明目标操作数的属性,否则将被默认为字 型操作数。型操作数。 地址传送指令地址传送指令 LEA传送指令传送指令 格式:格式: LEA目标操作数,源操作数目标操作数,源操作数 例如:例如:TABLEDB 31H,32H,33H,34H LEA DI,TABLE 等效于等效于 MOV DI,OFFSET TABLE 指针传送指令指针传送指令 格式:格式: LDS/LES/LFS/LGS/LSS 目标操作数,源操作数目标操作数,源操作数 例如:设数据段有例如:设数据段有 XYZ1 DF1234567890A

28、BH XYZ2 DD56781234H 如此时如此时DS已指向数据段:已指向数据段: LESEBX,XYZ1 ;ES=1234H,EBX=567890ABH LDSSI,XYZ2 ;DS=5678H,SI=1234H 查表转换指令查表转换指令XLAT 例如:利用查表转换功能实现一位十六进制数与例如:利用查表转换功能实现一位十六进制数与ASCII码的转换。码的转换。 DATA SEGMENT TAB DB 0123456789ABCDEF NUM DB? ;0F中的任一数中的任一数 DATA ENDS 代码段设置如下指令,可查出与代码段设置如下指令,可查出与NUM单元中的数相对应的单元中的数相对

29、应的ASCII编码:编码: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TAB MOV AL,NUM XLAT 字节交换指令字节交换指令BSWAP 格式:格式:BSWAP 32位寄存器位寄存器 标志寄存器传送指令标志寄存器传送指令LAHF/SAHF 格式:格式:LAHF 或或 SAHF 2)堆栈指令)堆栈指令 压栈指令压栈指令PUSH 格式:格式:PUSH源操作数源操作数 弹栈指令弹栈指令POP 格式:格式:POP目标操作数目标操作数 16位标志寄存器压栈位标志寄存器压栈/弹栈指令弹栈指令PUSHF/POPF 格式:格式:PUSHF POPF 32位标志寄存器压栈位

30、标志寄存器压栈/弹栈指令弹栈指令PUSHFD/POPFD 格式:格式:PUSHFD POPFD 全部全部16位通用寄存器压栈位通用寄存器压栈/弹栈指令弹栈指令PUSHA/POPA 格式:格式:PUSHA POPA 全部全部32位通用寄存器压栈位通用寄存器压栈/弹栈指令弹栈指令PUSHAD/POPAD 格式:格式:PUSHAD POPAD 3 3)I/OI/O指令指令 直接寻址的直接寻址的I / / O指令指令 格式:格式:IN AL/ /AX,PORT OUT PORT,AL/ /AX DX间址的间址的I / / O指令指令 格式:格式:IN AL/ /AX/ /EAX,DX OUT DX,A

31、L/ /AX/ /EAX 二二 、算术运算指令、算术运算指令 1)基本四则运算)基本四则运算 加法指令加法指令ADD/ /带进位加法指令带进位加法指令ADC 格式:格式:ADD目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数 = 源操作数源操作数 + 目标操作数目标操作数 格式:格式:ADC目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数 = 源操作数源操作数 + 目标操作数目标操作数CF 减法指令减法指令SUB / /带借位减法指令带借位减法指令SBB 格式:格式:SUB目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数 = 源操作数源操作

32、数 目标操作数目标操作数 格式:格式:SBB目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数 = 源操作数源操作数 目标操作数目标操作数CF 加加1指令指令INC/ /减减1指令指令DEC/ /求补指令求补指令NEG 格式:格式:INC目标操作数;目标操作数目标操作数;目标操作数 = 目标操作数目标操作数 + 1 DEC目标操作数;目标操作数目标操作数;目标操作数 = 目标操作数目标操作数 1。 求补指令求补指令NEG 格式:格式:NEG目标操作数目标操作数 ;目标操作数;目标操作数 = 0 目标操作数目标操作数 交换加法指令交换加法指令XADD 格式:格式:XADD目标操作

33、数,源操作数目标操作数,源操作数 ;将源操作数和目标操作数进行互换,然后将源操作数与目标操将源操作数和目标操作数进行互换,然后将源操作数与目标操 作数之和送给目标操作数。指令执行后的源操作数是指令执行前的目标作数之和送给目标操作数。指令执行后的源操作数是指令执行前的目标 操作数。操作数。 比较指令比较指令CMP 格式:格式:CMP 目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数 - - 源操作数源操作数 比较并交换指令比较并交换指令CMPXCHG 格式格式: CMPXCHG 目标操作数,源操作数目标操作数,源操作数 ; 将目标操作数与累加器将目标操作数与累加器AL,AX或或

34、EAX比较,若相等则将源操作数比较,若相等则将源操作数 传送到目标操作数,否则将目标操作数传送到累加器。传送到目标操作数,否则将目标操作数传送到累加器。 无符号数乘法指令无符号数乘法指令MUL/ /带符号数乘法指令带符号数乘法指令IMUL 格式:格式:IMUL源操作数源操作数 ;EAX/ /AXAL/ /AX源操作数源操作数 IMUL目标操作数,源操作数目标操作数,源操作数 ;目标操作数;目标操作数目标操作数目标操作数源操作数源操作数 IMUL目标操作数,源操作数,立即数目标操作数,源操作数,立即数 ;在三操作数格式下,目标操作数只能是在三操作数格式下,目标操作数只能是16或或32位的通用寄存

35、器,位的通用寄存器, 源操作数是与目标操作数等长的寄存器操作数或内存操作数,立即数也源操作数是与目标操作数等长的寄存器操作数或内存操作数,立即数也 与它们等长。与它们等长。8位立即数能自动进行符号扩展,转换成位立即数能自动进行符号扩展,转换成16或或32位的立即数。位的立即数。 无符号数除法无符号数除法DIV/ /带符号数除法带符号数除法IDIV 格式:格式: DIV源操作数源操作数 ; AX/ /DX:AX/ /EDX:EAX源操作数源操作数 ; ;商:商:AL/ /AX/ /EAX,余数:余数:DL/ /DX/ /EDX IDIV源操作数源操作数 ;被除数和除数都是带符号数,被除数和除数都

36、是带符号数, ;商和余数的符号相同。;商和余数的符号相同。 说明:说明:若除数为若除数为0或商过大(超过保存商的累加器容量)时,产生或商过大(超过保存商的累加器容量)时,产生0号中断号中断 符号位扩展(数据宽度变换)指令符号位扩展(数据宽度变换)指令CBW,CWD,CWDE,CDQ 格式:格式:CBW/CWD/CWDE/CDQ 说明:说明: CBW将将AL中的中的8位带符号数带符号扩展为位带符号数带符号扩展为16位位AX中。中。 CWD将将AX中的中的16位带符号数带符号扩展为位带符号数带符号扩展为32位位DX:AX中。中。 CWDE将将AX中的中的16位带符号数带符号扩展为位带符号数带符号扩

37、展为32位位EAX中。中。 CDQ将将EAX中的中的32位带符号数带符号扩展为位带符号数带符号扩展为64位位EDX:EAX中。中。 2 2)十进制调整指令)十进制调整指令 格式:格式:DAA ;组合;组合BCD码数的加法调整指令码数的加法调整指令 DAS;组合;组合BCD码数的减法调整指令码数的减法调整指令 AAA;分离;分离BCD码数的加法调整指令码数的加法调整指令 AAS;分离;分离BCD码数的减法调整指令码数的减法调整指令 AAM ;分离;分离BCD码数的乘法调整指令码数的乘法调整指令 AAD;分离;分离BCD码数的除法调整指令码数的除法调整指令 例如:例如: MOV AL,08H AD

38、D AL,09H DAA 结果结果: AL = 17D 三、逻辑运算指令和移位指令三、逻辑运算指令和移位指令 1)逻辑运算指令)逻辑运算指令 逻辑与逻辑与/ /或或/ /异或指令异或指令 AND/ /OR/ /XOR 格式:格式:AND/OR/XOR 目标操作数,源操作数目标操作数,源操作数 测试指令测试指令TEST 格式:格式:TEST目标操作数,源操作数目标操作数,源操作数 逻辑非指令逻辑非指令NOT 格式:格式:NOT操作数操作数 例如例如: 要求屏蔽要求屏蔽0、1两位,可用两位,可用AND指令并设置常数指令并设置常数0FCH MOVAL,0BFH ANDAL,0FH ;结果;结果AL=

39、0BCH 要求第要求第5位置位置1,可用,可用OR指令指令 MOVAL,43H ANDAL,20H ;结果;结果AL=63H 算术算术/逻辑右移指令逻辑右移指令SAR/SHR 格式:格式:SAR/SHR操作数,移位次数操作数,移位次数 CFCFMSBLSBLSBMSB操作数操作数操作数操作数 0 2)移位指令)移位指令 算术算术/逻辑左移指令逻辑左移指令SAL/SHL 格式:格式:SAL/SHL操作数,移位次数操作数,移位次数 CF MSBLSB 0 操作数操作数 循环移位指令循环移位指令ROL/ /ROR/ /RCL/ /RCR 格式:格式:ROL/ROR/RCL/RCR操作数,移位次数操作

40、数,移位次数 CF CF MSBMSBLSBLSB操作数操作数操作数操作数 RORRCR CFCFMSBLSB LSB操作数操作数操作数操作数 ROLRCL MSB 双精度左移双精度左移/ /右移指令右移指令SHLD/ /SHRD 格式:格式:SHLD/SHRDSHLD/SHRD 目标操作数,源操作数,移位次数目标操作数,源操作数,移位次数 CFCF CFCF 目标操作数目标操作数 目标操作数目标操作数 源操作数源操作数 源操作数源操作数 31 31 3131 00 00 例如:例如: AX=0012H,BX=0034H,将两寄存器的低,将两寄存器的低8位组合形成位组合形成AX=1234H M

41、OV CL,8 ROLAX,CL ADDAX,BX 说明:说明: 80486的移位次数不能大于的移位次数不能大于31。8086用立即数作移位次数时只能是用立即数作移位次数时只能是1,但,但 用用CL作移位次数时可移位作移位次数时可移位255次。次。 左移指令常用于实现乘以左移指令常用于实现乘以2n的操作,右移指令常用于实现除以的操作,右移指令常用于实现除以2n的操作。的操作。 操作数可以是操作数可以是8位、位、16位或位或32位的寄存器或存储器操作数,移位次数可位的寄存器或存储器操作数,移位次数可 以用立即数或以用立即数或CL寄存器的内容指明。寄存器的内容指明。 3)位测试指令与位扫描指令)位

42、测试指令与位扫描指令 位测试指令位测试指令 格式:格式:BT目标操作数,源操作数目标操作数,源操作数 ;测试指定的位并将它拷贝至进位标志位测试指定的位并将它拷贝至进位标志位CF CF BTS标操作数,源操作数标操作数,源操作数 ;测试指定的位并将它拷贝至进位标志位;测试指定的位并将它拷贝至进位标志位CF,再将该位置,再将该位置1 BTR目标操作数,源操作数目标操作数,源操作数 ;测试指定的位并将它拷贝至进位标志位;测试指定的位并将它拷贝至进位标志位CF,再将该位清,再将该位清0 BTC目标操作数,源操作数目标操作数,源操作数 ;测试指定的位并将它拷贝至进位标志位测试指定的位并将它拷贝至进位标志

43、位CFCF,再将该位取反,再将该位取反 向前位扫描指令向前位扫描指令BSF 格式:格式:BSF目标操作数,源操作数目标操作数,源操作数 ;对源操作数所指定的字或双字从右向左进行扫描,;对源操作数所指定的字或双字从右向左进行扫描, 找出第一个是找出第一个是“1”的位,把此位的下标放在目标操作数中。的位,把此位的下标放在目标操作数中。 向后位扫描指令向后位扫描指令BSR 格式:格式:BSRBSR目标操作数,源操作数目标操作数,源操作数 ;对源操作数所指定的字或双字从左向右进行扫描,对源操作数所指定的字或双字从左向右进行扫描, 找出第一个是找出第一个是“1”的位,把此位的下标放在目标操作数中。的位,

44、把此位的下标放在目标操作数中。 四、字符串操作指令四、字符串操作指令 1)串传送指令)串传送指令 MOVS/ /MOVSB/ /MOVSW/ / MOVSD 格式:格式: MOVS 目标操作数,源操作数目标操作数,源操作数 ; 把由把由DS:SI(或(或ESI)指向的字节、字或双字存储单元的内容)指向的字节、字或双字存储单元的内容 复制到由复制到由ES:DI (或(或EDI)指向的存储单元中去。)指向的存储单元中去。 2)取串指令)取串指令 LODS/ /LODSB/ /LODSW/ / LODSD 格式:格式:LODS 源操作数源操作数 ;将;将DS:SI (或(或ESI)指向的存储单元中内

45、容取到累加器)指向的存储单元中内容取到累加器AL, AX或或EAX中。中。 3)存串指令)存串指令 STOS/ /STOSB/ /STOSW/ /STOSD 格式:格式:STOS 目标操作数目标操作数 ;把累加器;把累加器AL,AX或或EAX的内容存到由的内容存到由ES:DI(或(或EDI) 指向的字节,字或双字存储单元中。指向的字节,字或双字存储单元中。 4)串比较指令)串比较指令 CMPS/CMPSB/CMPSW/CMPSD 格式:格式:CMPS目标操作数,源操作数目标操作数,源操作数 ;将;将DS:SI(或(或ESI)指向的字节或字存储单元的内容与由)指向的字节或字存储单元的内容与由ES

46、:DI (或或EDI)指向的存储单元的内容相比较指向的存储单元的内容相比较(相减相减),比较结果不保存。,比较结果不保存。 5)串搜索指令)串搜索指令 SCAS/ /SCASB/ /SCASW/ /SCASD 格式:格式:SCAS 目标操作数目标操作数 ;将累加器;将累加器AL,AX或或EAX中的内容与由中的内容与由ES:DI(或(或EDI)指向的)指向的 字节或字存储单元的内容相比较(相减),比较结果不保存。字节或字存储单元的内容相比较(相减),比较结果不保存。 6)从端口输入字符串指令)从端口输入字符串指令 INSB/INSW/INSD 格式:格式: INSB ;从;从DX指定的端口输入一

47、个字节、字或双字元素传送到指定的端口输入一个字节、字或双字元素传送到ES:EDI 所指定的存储单元,同时自动修改目的指针。所指定的存储单元,同时自动修改目的指针。 7)向端口输出字符串)向端口输出字符串 OUTSB/ /OUTSW/ /OUTSD 格式:格式:OUTSB ;把;把DS:ESI所指定的存储单元中的字节、字或双字传送给所指定的存储单元中的字节、字或双字传送给 DX指定的端口。指定的端口。 8)重复前缀)重复前缀REP 格式:格式:REP MOVS REP STOS REP OUTS REP INS ;只要;只要CX(ECX)寄存器中的内容不为)寄存器中的内容不为0,就重复执行,就重

48、复执行REP后的后的 串操作指令。串操作指令。 9)条件重复前缀)条件重复前缀 REPE/ /REPZ/ /REPNE/ /REPNZ 格式:格式:REPE/REPZCMPS REPE/REPZSCAS REPNE/REPNZCMPS REPNE/REPNZSCAS REPE/REPZ当零标志位当零标志位ZF = 1且且CX(ECX)的内容不为)的内容不为0时,重复执时,重复执 行它后面的串操作。行它后面的串操作。 REPNE/REPNZ当零标志位当零标志位ZF = 0且且CX(ECX)的内容不为)的内容不为0时,重时,重 复执行它后面的串操作。复执行它后面的串操作。 例如:将数据段中长度为例

49、如:将数据段中长度为17的字符串的字符串MESS1 转送到附加段转送到附加段MESS2 开始的开始的 地址位置。设数据段和附加段的起始地址为地址位置。设数据段和附加段的起始地址为DATA。 MOVAX,DATA MOVDS,AX MOVES,AX LEASI,MESS1 LEADI,MESS2 MOVCX,17 CLD REPMOVSB 五、控制转移指令五、控制转移指令 1 1)无条件转移指令)无条件转移指令JMPJMP 格式:格式:JMP JMP 目标操作数目标操作数 根据目标地址相对于转移指令执行的当前位置的转移方式可以分为根据目标地址相对于转移指令执行的当前位置的转移方式可以分为3 3种

50、种 短转移(短转移(SHORTSHORT):): 在段内的短距离(在段内的短距离(-128-128127127)转移。)转移。 段内转移(段内转移(NEARNEAR):目标地址与转移指令都在同一段内。):目标地址与转移指令都在同一段内。 段间转移(段间转移(FARFAR):): 目标地址与转移指令分别位于不同的段内,转移目标地址与转移指令分别位于不同的段内,转移 时时CSCS和和IPIP(EIPEIP)中的值都要发生改变。)中的值都要发生改变。 JMPJMP指令的三种寻址方式指令的三种寻址方式 直接寻址:在指令中直接给出转移目标的地址标号,可以实现段内和直接寻址:在指令中直接给出转移目标的地址

51、标号,可以实现段内和 段间转移。段间转移。 寄存器间接寻址:目标操作数是某一寄存器,在寄存器中存放转移的寄存器间接寻址:目标操作数是某一寄存器,在寄存器中存放转移的 目标地址,只能实现段内转移。目标地址,只能实现段内转移。 存储器间接寻址:目标操作数是存储器操作数,在内存单元中存放转存储器间接寻址:目标操作数是存储器操作数,在内存单元中存放转 移的目标地址,可以实现段内和段间的转移移的目标地址,可以实现段内和段间的转移 。 2 2)条件转移指令)条件转移指令 格式:指令助记符格式:指令助记符 转移地址标号转移地址标号 常用条件转移指令常用条件转移指令 无符号无符号 数条件数条件 转移指转移指

52、令令 指令助记符指令助记符转移条件转移条件 说说 明明 JCJCCF=1CF=1有进位转移(与有进位转移(与JB/JNAEJB/JNAE重叠)重叠) JNCJNCCF=0CF=0无进位转移(与无进位转移(与JAE/JNBJAE/JNB重叠)重叠) JP/JPEJP/JPEPF=1PF=1校验为偶转移校验为偶转移 JP/JPOJP/JPOPF=0PF=0校验为奇转移校验为奇转移 JA/JNBEJA/JNBECF=ZF=0CF=ZF=0高于高于/ /不低于或等于转移不低于或等于转移 JAE/JNBJAE/JNBCF=0CF=0高于或等于高于或等于/ /不低于转移不低于转移 JB/JNAEJB/JN

53、AECF=1CF=1低于低于/ /不高于或等于转移不高于或等于转移 JBE/JNAJBE/JNACF=1CF=1或或ZF=1ZF=1低于或等于低于或等于/ /不高于转移不高于转移 JE/JZJE/JZZF=1ZF=1等于等于/ /为零转移为零转移 JNE/JNZJNE/JNZZF=0ZF=0不等于不等于/ /非零转移非零转移 有符号有符号 数条件数条件 转移指转移指 令令 指令助记符指令助记符转移条件转移条件 说说 明明 JOJOOF=1OF=1溢出转移溢出转移 JNOJNOOF=0OF=0无溢出转移无溢出转移 JSJSSF=1SF=1为负数转移为负数转移 JNSJNSSF=0SF=0为正数转

54、移为正数转移 JG/JNLEJG/JNLEZF=0ZF=0且且SF=OFSF=OF大于大于/ /不小于或等于转移不小于或等于转移 JGE/JNLJGE/JNLSF=OFSF=OF大于或等于大于或等于/ /不小于转移不小于转移 JL/JNGEJL/JNGESFOFSFOF小于小于/ /不大于或等于转移不大于或等于转移 JLE/JNGJLE/JNGZF=1ZF=1或或SFOFSFOF小于或等于小于或等于/ /不大于转移不大于转移 JCXZJCXZ(CXCX)=0=0CXCX寄存器为零转移寄存器为零转移 说明:说明: 转移范围在转移范围在1616位寻址方式下为位寻址方式下为64KB64KB,3232

55、位寻址方式下为位寻址方式下为4GB4GB。 条件转移指令执行后,均不影响标志位。条件转移指令执行后,均不影响标志位。 3)循环控制转移指令)循环控制转移指令 格式:格式:LOOP 转移地址标号转移地址标号 LOOPE/LOOPZ 转移地址标号转移地址标号 LOOPNE/LOOPNZ转移地址标号转移地址标号 JCXZ转移地址标号转移地址标号 操作码转移操作码转移助记符助记符条件功能条件功能 LOOP(E)CX0若满足条件则将若满足条件则将(E)CX减减1, 并转移到标号处的指令执行并转移到标号处的指令执行 LOOPE/LOOPZ(E)CX0且且ZF=1若满足条件则将若满足条件则将(E)CX减减1

56、, 并转移到标号处的指令执行并转移到标号处的指令执行 LOOPNE/LOOPNZ(E)CX0且且ZF=0若满足条件则将若满足条件则将(E)CX减减1, 并转移到标号处的指令执行并转移到标号处的指令执行 JCXZ(E)CX=0若满足条件,转移到标号处若满足条件,转移到标号处 的指令执行的指令执行 说明:说明:与条件转移指令相同,该指令的转移地址标号必须在距离下一条与条件转移指令相同,该指令的转移地址标号必须在距离下一条 指令的指令的-128+127B范围内。范围内。 例如:根据加法运算的结果做不同的处理,如结果为例如:根据加法运算的结果做不同的处理,如结果为 0 转向转向 KK1,结果,结果 为

57、为 1 转向转向 KK2 执行。执行。 方法方法1: ADDAX,BX JZKK2 ;KK2: 方法方法2: ADDAX,BX JNZKK1 ;KK2 处理程序处理程序 KK1: 4 4)过程调用指令)过程调用指令 格式:格式:CALL目标操作数目标操作数 ;先将;先将CALL的后继指令地址(也称为断点)保存在堆栈中,然后的后继指令地址(也称为断点)保存在堆栈中,然后 控制程序转移到目标操作数指定的位置继续执行。控制程序转移到目标操作数指定的位置继续执行。 段内调用时段内调用时:当前的:当前的IP(EIP)压栈,将目标地址送给)压栈,将目标地址送给IP(EIP);); 段间调用时段间调用时:当

58、前的:当前的CS和和IP(EIP)压栈,将目标地址的段基址)压栈,将目标地址的段基址 和偏移量送给和偏移量送给CS和和IP(EIP)。)。 CALL指令有指令有3种寻址方式:种寻址方式: 直接寻址:在指令中直接给出被调用过程的过程名。可以实现段内和段直接寻址:在指令中直接给出被调用过程的过程名。可以实现段内和段 间转移。间转移。 寄存器间接寻址:目标操作数是某一寄存器,在寄存器中存放被调用过寄存器间接寻址:目标操作数是某一寄存器,在寄存器中存放被调用过 程的入口地址。只能实现段内转移。程的入口地址。只能实现段内转移。 存储器间接寻址:目标操作数是内存操作数,在内存单元中存放被调用存储器间接寻址

59、:目标操作数是内存操作数,在内存单元中存放被调用 的子程序入口地址,可以实现段内和段间的转移。的子程序入口地址,可以实现段内和段间的转移。 5)过程返回指令)过程返回指令RET 格式:格式:RET/RET n ;将当前堆栈栈顶元素无条件弹出,作为返回的目标地址。若是段内返回,;将当前堆栈栈顶元素无条件弹出,作为返回的目标地址。若是段内返回, 则只弹出偏移地址给则只弹出偏移地址给IP(EIP);若是段间返回,则弹出段基址和偏移地址);若是段间返回,则弹出段基址和偏移地址 给给CS和和IP(EIP)。)。 说明:说明: RET n称为带参数的返回指令,该参数称为带参数的返回指令,该参数n必须是立即

60、数。返回时,堆栈指必须是立即数。返回时,堆栈指 针除了加上弹出的返回地址的字节数以外,还要加上参数针除了加上弹出的返回地址的字节数以外,还要加上参数n所给出的立即数。所给出的立即数。 这个立即数必须是这个立即数必须是16位的偶数。位的偶数。 如果在执行如果在执行RET指令之前,栈顶元素仍然是调用程序的断点地址,则指令之前,栈顶元素仍然是调用程序的断点地址,则RET 指令执行后,能够正确返回调用程序断点,否则不能。指令执行后,能够正确返回调用程序断点,否则不能。 近过程和远过程中的近过程和远过程中的RET指令,格式相同,但汇编后生成的目标代码不一指令,格式相同,但汇编后生成的目标代码不一 样,前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论