《第3章 指系统-D12.ppt》由会员分享,可在线阅读,更多相关《第3章 指系统-D12.ppt(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 第第3章章 80X86的寻址方式的寻址方式和指令系统和指令系统第1节 80X86的数据类型第2节 80X86的寻址方式寻址方式第3节 80X86的指令系统指令系统2学习指导和要求n n掌握80486的七种数据类型;n n熟练掌握九种寻址方式;n n熟记各种类型的指令格式及功能,并能编写简单程序。3 第1节 80X86的数据类型 8048680486汇编语言中可使用的数据类型有以下七种:汇编语言中可使用的数据类型有以下七种:汇编语言中可使用的数据类型有以下七种:汇编语言中可使用的数据类型有以下七种:1.1.无符号二进制数无符号二进制数 字节字节(8(8位位):0255(00FFH),0255
2、(00FFH),占用一字节存储单元。占用一字节存储单元。字字(16(16位位):065535(00FFFFH)065535(00FFFFH),占用连续的两字,占用连续的两字节存储单元,低地址存储单元存放低节存储单元,低地址存储单元存放低8 8位数据,高地位数据,高地址存储单元存放高址存储单元存放高8 8位数据,低字节地址为该字的地址。位数据,低字节地址为该字的地址。双字双字(32(32位位):04294967299(00FFFFFFFFH)04294967299(00FFFFFFFFH),占用,占用连续的四字节存储单元,最低地址存储单元存放最低连续的四字节存储单元,最低地址存储单元存放最低8
3、8位数据,最高地址存储单元存放最高位数据,最高地址存储单元存放最高8 8位数据,最低字位数据,最低字节地址为该双字的地址。节地址为该双字的地址。42.有符号二进制数有符号二进制数字节字节:-128+127(80HFFH,00H7FH):-128+127(80HFFH,00H7FH)字字:-32768+32767(8000HFFFFH,00000H7FFFH):-32768+32767(8000HFFFFH,00000H7FFFH)双字双字:-2147483650+2147483649-2147483650+2147483649(80000000HFFFFFFFFH,000000000H7FFF
4、FFFFH)(80000000HFFFFFFFFH,000000000H7FFFFFFFH)以补码形式存储,地址单元分配与无符号数类似。以补码形式存储,地址单元分配与无符号数类似。3.浮点数(实数)浮点数(实数)单精度数(单精度数(3232位)位):数据格式如下:数据格式如下:阶阶 码码 有有 效效 数数 31 30 23 22 031 30 23 22 0符符号号位位1 1.1 1位符号位符号,8,8位阶码位阶码,24,24位有效数位有效数(显式显式2323位位,外加外加1 1位隐含的整位隐含的整数数“1.”1.”。5双精度数双精度数(64(64位位):数据格式如下:数据格式如下:1 1位符
5、号位符号,11,11位阶码位阶码,53,53位有效数位有效数(显式显式5252位位,外加外加1 1位隐含的整数位隐含的整数“1.”1.”。63 62 52 51 0 63 62 52 51 0 阶阶 码码 有有 效效 数数符符号号位位1.1.扩展精度数扩展精度数(80(80位位):数据格式如下:数据格式如下:79 78 64 63 62 0 79 78 64 63 62 0 阶阶 码码 1 1 有有 效效 数数符符号号位位1 1位符号位符号,15,15位阶码位阶码,64,64位有效数位有效数(内含内含1 1位整数位整数1,1,小小数点是隐含的。数点是隐含的。.64.BCDBCD码码压缩压缩BC
6、DBCD码码:1 1字节存放两个字节存放两个BCDBCD码,格式如图码,格式如图a a 7 4 3 0 7 4 3 0 (a)(b)非压缩非压缩BCDBCD码码:1 1字节存放一个字节存放一个BCDBCD码(低码(低4 4位),位),格式如图格式如图b b5.字符串字符串位串位串:从任何字节的任何位开始的相邻位序列,最:从任何字节的任何位开始的相邻位序列,最长可达长可达2 23232-1-1位位字节字节/字字/双字串双字串:是字节、字、双字的相邻序列,最:是字节、字、双字的相邻序列,最长可达长可达2 23232-1-1字节。字节。十位十位 个位个位0 0或任意或任意 个位个位76.ASCII码
7、 ASCII码字符串:如ABC123 ASCII码数:如30H39H(09),41H46H(AF)7.指针数据近指针(32位):是一个32位的段内偏移地址,段内寻址时使用。远指针(48位):是一个由16位选择符和32位偏移量组成,段间寻址时使用。返返 回回8 第2节 80X86的寻址方式 80X8680X86的寻址方式共有的寻址方式共有9 9种:种:1.立即寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.相对寄存器间接寻址 6.基址加变址寻址7.相对基址加变址寻址8.基址加比例变址寻址9.相对基址加比例变址寻址9l l立即寻址立即寻址 指定的操作数紧跟在操作码之后,直接存放在代码段中。指定
8、的操作数紧跟在操作码之后,直接存放在代码段中。如:如:MOV BLMOV BL,56H 56H ;BL 56HBL 56H MOV AX MOV AX,2056H 2056H ;AX 2056HAX 2056H MOV ECX MOV ECX,12345678H 12345678H ;ECX 12345678H ECX 12345678H 立即数只能作源操作数。不能作目的操作数。立即数只能作源操作数。不能作目的操作数。l l寄存器寻址寄存器寻址操作数在操作数在CPUCPU的寄存器中,而寄存器的名由指令指出。的寄存器中,而寄存器的名由指令指出。如:如:INC CL INC CL ;CL CL (
9、CLCL)+1+1 MOV AX MOV AX,BX BX ;AX AX (BXBX)10l l直接寻址直接寻址 操作数有效地址(操作数有效地址(1616位或位或3232位)直接包含在指令中,它位)直接包含在指令中,它位于操作码之后,存放在代码段中。如果指令无位于操作码之后,存放在代码段中。如果指令无前缀前缀指指明在那一段中,则默认操作数存放在明在那一段中,则默认操作数存放在数据段数据段。如:如:MOV AXMOV AX,2000H 2000H ;DSDS段段2000H2000H的内容送的内容送ALAL,2001H2001H的内容送的内容送AHAH MOV AX MOV AX,FSFS:200
10、0H2000H;FSFS段段2000H2000H的内容送的内容送ALAL,2001H2001H的内容送的内容送AHAHl l寄存器间接寻址寄存器间接寻址操作数的偏移地址存放在寄存器中,而操作数存放在存操作数的偏移地址存放在寄存器中,而操作数存放在存储器中。储器中。(1 1)1616位寻址位寻址 EA=DIEA=DI、SISI、BX BX、BP BP 无前缀默认操作数存放在数据段无前缀默认操作数存放在数据段无前缀默认操作数存放在堆栈段无前缀默认操作数存放在堆栈段11例如:例如:MOV AXMOV AX,BX BX ;AX (DS*10H+(BX)AX (DS*10H+(BX)MOV AX MOV
11、 AX,BP BP ;AX (SS*10H+(BP)AX (SS*10H+(BP)MOV AX MOV AX,ESES:BXBX;AX (ES*10H+(BX)AX (ES*10H+(BX)MOV AX MOV AX,DSDS:BPBP;AX (DS*10H+(BP)AX (DS*10H+(BP)(2 2)3232位寻址位寻址 EA=EDIEA=EDI、ESIESI、EBXEBX、EAXEAX、ECXECX、EDXEDX、ESPESP、EBP EBP ESPESP、EBPEBP默认操作数存放在堆栈段,其它默认操作数默认操作数存放在堆栈段,其它默认操作数存放在数据段。存放在数据段。例如:例如:M
12、OV AXMOV AX,EBX EBX ;DSDS段字数据送段字数据送AXAX MOV AX MOV AX,EBP EBP ;SSSS段字数据送段字数据送AXAX MOV ECXMOV ECX,ESES:EBX ;ESEBX ;ES段双字数据送段双字数据送ECXECX 12l l相对寄存器间接寻址相对寄存器间接寻址寄存器内容与位移量之和形成操作数的有效地址。即:寄存器内容与位移量之和形成操作数的有效地址。即:EA=EA=寄存器寄存器+位移量位移量 (1)16(1)16位寻址位寻址 EA=BXEA=BX、BPBP、DIDI、SI+SI+位移量位移量(带符号带符号8 8或或1616位整数位整数)如
13、:如:MOV AXMOV AX,2040HBX2040HBX 或或 MOV AXMOV AX,BX+2040HBX+2040H;DSDS段段(BX)+2040H(BX)+2040H中的字中的字 数据送数据送AXAX。(2)32(2)32位寻址位寻址 EA=EAXEA=EAX、EBXEBX、.、ESIESI、ESPESP、EBP+EBP+位位移量移量(带符号带符号8 8或或3232位整数位整数)如:如:MOV ECXMOV ECX,1500HEAX1500HEAX;DSDS段段(EAX)+1500H(EAX)+1500H 或或MOV ECXMOV ECX,EAX+1500H EAX+1500H
14、中的双字数据送中的双字数据送ECXECX。13l l基址加变址寻址基址加变址寻址 基址寄存器内容与变址寄存器内容之和形成操作数的偏基址寄存器内容与变址寄存器内容之和形成操作数的偏移地址。即:移地址。即:EA=EA=基址寄存器基址寄存器+变址寄存器变址寄存器 (1)16(1)16位寻址位寻址 基址寄存器基址寄存器:BX:BX、BP;BP;变址寄存器变址寄存器:DI:DI、SISI如:如:MOV AXMOV AX,BX+SIBX+SI或或MOV AXMOV AX,BXSIBXSI;DSDS段段(BX)+(SI)(BX)+(SI)中的字数中的字数 据送据送AXAX。(2)32(2)32位寻址位寻址
15、基址寄存器基址寄存器:任何一个任何一个3232位通用寄存器位通用寄存器 变址寄存器:除变址寄存器:除ESPESP之外的任一个之外的任一个3232位通用寄存器位通用寄存器 如:如:MOV AXMOV AX,EBX+ECX EBX+ECX;DSDS段段(EBX)+(ECX)(EBX)+(ECX)中中 或或MOV AXMOV AX,EBXECX EBXECX 的字数据送的字数据送AXAX。14h相对基址加变址寻址 基址寄存器内容与变址寄存器内容再加偏移量之和形成操作数的有效地址。即:EA=基址寄存器+变址寄存器+偏移量 如:MOV A X,1234HBX+DI 或MOV AX,BX+DI+1234H
16、 或MOV AX,1234HBXDI ;DS段 (BX)+(DI)+1234H中的字数据送AX。15h比例变址寻址(32位寻址)变址寄存器内容乘以比例因子再加位移量之和形成操作数的32位有效地址。即:EA=变址寄存器*比例因子+位移量如:MOV EAX,1200HESI*4h比例变址加基址寻址(32位寻址)变址寄存器内容乘以比例因子再加上基址寄存器的内容,形成操作数的32位有效地址。即:EA=变址寄存器*比例因子+基址寄存器如:MOV AX,EBX*4+ESI16h相对比例变址加基址寻址(32位寻址)变址寄存器内容乘以比例因子加上基址寄存器的内容再加位移量之和,形成操作数的32位有效地址。即:
17、EA=变址寄存器*比例因子+基址寄存器+位移量如:MOV AX,EDI*8+EBX+40H MOV ECX,2000HEDX*4EAX 比例变址寻址、比例变址加基址寻址、相对比例变址加基址寻址只有32位寻址一种情况。17与跳转有关的寻址方式与跳转有关的寻址方式用于确定程序转移或调用的目与跳转有关的寻址方式用于确定程序转移或调用的目标。如:标。如:无条件转移语句:无条件转移语句:JMP dstJMP dst dst:dst:转移目标转移目标调用语句:调用语句:CALL dstCALL dst dst:dst:调用目标调用目标 参见转移和调用指令一节。参见转移和调用指令一节。练习题:练习题:假设假
18、设(DS)=2000H,(ES)=2100H,(SS)=1500H,(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0040H(SI)=00A0H,(BX)=0100H,(BP)=0040H,指令,指令 MOV AX,srcMOV AX,src中,中,以下以下srcsrc为何种寻址方式?有效地为何种寻址方式?有效地址和物理地址各是多少?址和物理地址各是多少?(1)100HBX(1)100HBX (2)BX (2)BX (3)BP (3)BP (4)ES:BX+10H (5)BX (6)1000H (4)ES:BX+10H
19、(5)BX (6)1000H (7)SI (7)SI (8)1000HBX+SI (8)1000HBX+SI (9)1000HBPSI (10)BXSI (9)1000HBPSI (10)BXSI18 第3节 80X86的指令系统一、指令格式 指令格式:标号:操作码 操作数,;注释 其中:标号:确定汇编语句的位置,提供跳转、循环的目标。操作码:汇编语句操作。操作数:操作数据项,数目因操作码而异。注释:程序注解。如:START:MOV AX,DATA MOV DS,AX ;设置DS19二、指令系统二、指令系统 80486的指令大致分为:整数指令:数据传送、算术运算、逻辑运算与移位、串操作、位操作
20、指令、控制转移、标志操作、按条件设置字节、处理器控制指令、高级语言指令等浮点数指令:数据传送、算术运算、比较、超越函数、常量、控制等指令操作系统型指令20 指令操作数符号说明:OP1OP1,OP2OP2,OP3OP3:操作数:操作数 reg reg :通用寄存器。长度可以是:通用寄存器。长度可以是8 8位、位、1616位、位、3232位位 Sreg Sreg :段寄存器(段选择符):段寄存器(段选择符)reg8 reg8 :8 8位通用寄存器位通用寄存器 reg16 reg16:1616位通用寄存器位通用寄存器 reg32 reg32:3232位通用寄存器位通用寄存器 mem mem :存储器
21、。长度可以是:存储器。长度可以是8 8位、位、1616位、位、3232位位 mem8 mem8 :8 8位存储器位存储器 mem16 mem16:1616位存储器位存储器 mem32 mem32:3232位存储器位存储器 imm imm :立即数。长度可以是:立即数。长度可以是8 8位、位、1616位、位、3232位位 imm8 imm8 :8 8位立即数位立即数21与运算有关的标志与运算有关的标志标志寄存器FLAGS中存放运算结果的属性。CF:进位/借位标志。加、减运算最高位产生进位/借位时置1。AF:辅助进位/借位标志。加、减运算时低半字节位产生进位/借位时置1。OF:溢出标志。有符号二进
22、制加、减运算结果超出范围时置1。ZF:零标志。结果为零时置1。SF:符号标志。结果为负时置1。PF:奇偶标志。结果“1”的个数为偶数时置1。22 指令执行对标志位影响的符号说明:X:表示相应标志位状态依运算或操作结果决定 0:表示相应标志位无条件清“0”1:表示相应标志位无条件置“1”U:表示相应标志位状态未定义,状态随机 -:表示相应标志位状态不受影响,保持原状态23n数据传送类指令 用于实现存储器与寄存器、寄存器与寄存器、累加器与用于实现存储器与寄存器、寄存器与寄存器、累加器与I/OI/O端口之间字节、字或双字的传送,也可将立即数传端口之间字节、字或双字的传送,也可将立即数传送到存储器或寄
23、存器。送到存储器或寄存器。这类指令基本上不影响标志位这类指令基本上不影响标志位。传送指令MOV 指令格式:指令格式:MOV OP1MOV OP1,OP2OP2 reg/Sreg reg/Sreg,regreg reg reg,SregSreg reg/Sreg reg/Sreg,memmem mem mem,reg/Sregreg/Sreg reg reg,immimm mem mem,immimm24 功能:把OP2的内容传送到OP1中,OP1和OP2为 字节、字或双字 说明:立即数只能作为源操作数,而其他三种既可作源操作数又可作目的操作数;存储器和存储器之间以及段寄存器和段寄存器之间不允许
24、传数,而通用寄存器之间则允许相互传数。例如:用如下指令可给数据段寄存器DS赋初值 MOV AX,DATA MOV DS,AX 再如:MOV EBX,12345678H MOV AX,BX+2425交换指令XCHG 指令格式:XCHG OP1,OP2 reg,reg mem,reg reg,mem 功能:用于交换两个操作数。说明:指令中的两个操作数可以是两个寄存器操作数,或一个寄存器与一个存储器操作数。例如:XCHG AX,BX XCHG AX,BX XCHG BX+20H,AX26I/O指令IN和OUT 指令格式:IN OP1,OP2 OUT OP1OUT OP1,OPOP AL,imm8 i
25、mm8imm8,ALAL AX,imm8 imm8imm8,AXAX EAX,imm8 imm8imm8,EAXEAX AL,DX DXDX,ALAL AX,DX DXDX,AXAX EAX,DX DXDX,EAXEAX 功能:用于在I/O端口和AL、AX或EAX累加器之 间交换数据。27 例如:IN AL,0FAH ;从端口FAH输入8位数到AL IN EAX,28H ;将端口28H、29H、2AH和 2BH的32位数送EAX MOV DX,3AEH;I/O地址大于255时应通过 DX间接寻址 IN AX,DX ;从DX指出的端口输入16位数AX OUT 21H,AL ;将8位数从AL输出到
26、端口21H OUT DX,EAX ;将32位数从EAX输出到DX指 出的端口28装入有效地址指令LEA 格式:LEA Op1,OP2 reg32,mem reg16,mem 功能:将有效地址(即偏移地址)送通用寄存器。例如:LEA ECX,DOLLARESI*4+EDX 设:EDX=30H,ESI=32H,DOLLAR=7580H,则 (ECX)=7678H(32H*4+30H+7580H)29装入全地址指令LDS,LES,LFS.LGS,LSS 格式:LDS reg,mem LES reg,mem LFS reg,mem LGS reg,mem LSS reg,mem 功能:取mem指示的3
27、2位或48位全地址指针(即一个16位段选择符和一个16位或32位偏移地址)装入段寄存器和16位或32位reg中。30 对于实地址方式和虚拟8086方式,段基址和偏移地址都是16位,段基址送段寄存器,偏移地址送reg中。例如:X DD 12345678H LDS SI,X ;DS=1234H,SI=5678H 对于16位和32位保护方式,选择符送段寄存器,偏移地址送reg中。例如:X DD 12345678H;32位偏移值 DW 0010H ;16位选择符 LDS ESI,X ;ESI=12345678H,DS=0010H31压栈/弹栈指令PUSH/POP 格式:格式:PUSH OP1 POP
28、OP1PUSH OP1 POP OP1 imm16 mem16 imm16 mem16 imm32 mem32 imm32 mem32 mem16 reg16 mem16 reg16 mem32 reg32 mem32 reg32 reg16 reg16 功能:功能:reg32reg32 PUSHPUSH指令使指令使(E)SP(E)SP的内容减的内容减2 2或减或减4 4,然后把,然后把1616位或位或3232位位的立即数、存储器操作数或寄存器操作数压入堆栈,的立即数、存储器操作数或寄存器操作数压入堆栈,SSSS:(E)SP(E)SP指向新的栈顶。指向新的栈顶。POPPOP指令从堆栈把字或双字
29、弹出至指令从堆栈把字或双字弹出至1616位或位或3232位存储器或位存储器或通用寄存器中,通用寄存器中,(E)SP(E)SP的内容加的内容加2 2或加或加4 4。32例如:PUSH AX;(ESP)-2 ESP,(AX)(ESP)PUSH BX;(ESP)-2 ESP,(BX)(ESP)PUSH CX;(ESP)-2 ESP,(CX)(ESP).POP CX;(ESP)CX,(ESP)+2 ESP POP BX;(ESP)BX,(ESP)+2 ESP POP AX;(ESP)AX,(ESP)+2 ESP 堆栈为“先进后出”的数据结构。33栈底栈底SPSP00H20H60H30H40H60H栈顶
30、SSSS图A图B设:AX=6040H,BX=3060H,CX=2000H 执行PUSH指令后,堆栈状态如图A,执行POP指令后,堆栈状态如图B。34全部通用寄存器压栈和出栈指令格式:PUSHA/POPA;16位通用寄存器压栈和 出栈指令。入栈顺序为:AX、CX、BX、DX、SP、BP、SI和DI。PUSHAD/POPAD;32位通用寄存器压栈和 出栈指令。入栈顺序为:EAX、ECX、EBX、EDX、ESP、EBP、ESI和EDI。其中:SP和ESP为操作前的栈顶指针。35 标志寄存器传送指令指令格式:LAHF ;F寄存器内容送AH指令SAHF ;AH内容送F寄存器指令PUSHF ;16位F内容
31、进栈指令(保存F)POPF ;16位F内容出栈指令(恢复F)PUHSFD;32位F内容进栈指令(保存F)POPD ;32位F内容出栈指令(恢复F)36查表转换指令XLAT 格式:XLAT ;AL AL (BX)+(AL)(BX)+(AL)功能:完成一个字节的查表转换 BXBX指向表的首地址指向表的首地址(DS(DS段内段内),ALAL装入要转换的代码在装入要转换的代码在表中的序号,并表中的序号,并XLATXLAT指令执行的结果存于指令执行的结果存于ALAL中。中。例如:查找例如:查找ASCIIASCII码表中,码表中,(BX)(BX)3 3的的ASCIIASCII码。码。程序如下:程序如下:(
32、BX)+(AL)(BX)+(AL)MOV DS MOV DS,AXAX LEA BX LEA BX,TABLETABLE;DSDS段表的首地址送段表的首地址送BXBX MOV AL MOV AL,3 3 ;要转换的代码在表中的序号;要转换的代码在表中的序号3 3送送ALAL XLAT XLAT ;AL (BX)+(AL),AL (BX)+(AL),查找到的查找到的3 3的的 ASCIIASCII码码33H33H保存在保存在ALAL中中序号序号0 01 12 23 34 4.TABLETABLE 30H 30H 31H 31H 32H 32H 33H33H 34H 34H .37n算术运算指令
33、支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的有符号和无符号二进制整数,也可以是无符号的压缩、非压缩BCD码。算术运算指令一般会影响FLAGS寄存器中的状态标志。加法和减法指令加法和减法指令ADD/SUBADD/SUB格式:格式:ADD OP1ADD OP1,OP2OP2;OP1 OP1+OP2,OP1 OP1+OP2,置标志位置标志位 regreg,regreg reg reg,memmem reg reg,immimm mem mem,regreg mem mem,immimm38ADDADD的功能:将的功能:将OP1OP1和和OP2OP2相加,结果存放在相加,结果存
34、放在OP1OP1。例:。例:ADD AXADD AX,BX BX ;AX (AX)+(BX)AX (AX)+(BX)ADD EBXADD EBX,ECX ECX ;EBX (EBX)+(ECX)EBX (EBX)+(ECX)ADD 3000HADD 3000H,AX AX ;3000H 3000H (3000H3000H)+(AX)+(AX)ADD 3000HADD 3000H,23 23 ;3000H 3000H (3000H3000H)+23+23SUB OP1SUB OP1,OP2 OP2 ;OP1 OP1-OP2 OP1 OP1-OP2,置标志位,置标志位 regreg,regreg
35、reg reg,memmem reg reg,immimm mem mem,regreg mem mem,immimm39SUB的功能:从OP1中减去OP2,结果存OP1中。例:SUB AX,BX ;AX (AX)-(BX)SUB EAX,ECX;EAX (EAX)-(ECX)SUB N,12345678H;N (N)-12345678HADDADD和和SUBSUB对标志位的影响:对标志位的影响:OF SF ZF AF PF CFOF SF ZF AF PF CFX X X X X XX X X X X X例:设例:设AL=64HAL=64H,AH=0A8HAH=0A8H,求执行下列指令的结果
36、,求执行下列指令的结果和标志位的状态。和标志位的状态。(1)ADD AL(1)ADD AL,AH ;AL (AL)+(AH),AH ;AL (AL)+(AH),有符号数有符号数.解:01100100 100D 得:(AL)=0CH(正确)+10101000 -88D OF SF ZF AF PF CF 1 00001100 12D 0 0 0 0 1 140(2)SUB AL(2)SUB AL,AH ;AL (AL)-(AH),AH ;AL (AL)-(AH),有符号数有符号数.解:解:|01100100 100D 01100100 100D 得得:(AL)=BCH(:(AL)=BCH(不正确
37、不正确)-10101000 -88D OF SF ZF AF PF CF -10101000 -88D OF SF ZF AF PF CF 10111100 -68D 10111100 -68D 1 1 1 0 1 0 1 0 1 0 1 1 有符号数加、减的结果有有符号数加、减的结果有“溢出溢出”的判断规则:的判断规则:对于加法:对于加法:正数正数+正数正数=负数,负数负数,负数+负数负数=正数正数 对于减法:对于减法:正数正数-负数负数=负数,负数,负数负数-正数正数=正数正数 例:设(例:设(ALAL)=7FH,(BL=7FH,(BL)=40H,=40H,判断执行判断执行ADD ALAD
38、D AL,BLBL指令的结果是否正确。指令的结果是否正确。解:解:01111111 127D 01111111 127D 得得:(AL)=0BFH(:(AL)=0BFH(不正确不正确)+01000000 64D OF SF ZF AF PF CF +01000000 64D OF SF ZF AF PF CF 10111111 -65D 10111111 -65D 1 1 1 0 0 0 0 1 0 0 0 041带进/借位的加、减法指令ADC/SBB格式:格式:ADC OP1ADC OP1,OP2OP2;OP1 OP1+OP2+OP1 OP1+OP2+CFCF ,置标志位,置标志位 regr
39、eg,regreg reg reg,memmem reg reg,immimm mem mem,regreg mem mem,immimmADCADC的功能:将的功能:将OP1OP1、OP2OP2和进位标志位和进位标志位CFCF相加,结果相加,结果存放在存放在OP1OP1。例:例:ADC AXADC AX,375 375 ;AX (AX)+375+AX (AX)+375+CFCF ADC EBX ADC EBX,ECXECX;EBX (EBX)+(ECX)+EBX (EBX)+(ECX)+CFCF42SBB OP1SBB OP1,OP2OP2;OP1 OP1-OP2-OP1 OP1-OP2-C
40、FCF ,置标志位,置标志位 regreg,regreg reg reg,memmem reg reg,immimm mem mem,regreg mem mem,immimmSBBSBB的功能:从的功能:从OP1OP1中减去中减去OP2OP2,再减去借位标志,再减去借位标志CFCF,结果存结果存OP1OP1中。中。例:例:SBB AXSBB AX,BXBX;AX (AX)-(BX)-AX (AX)-(BX)-CFCF SUB ECX SUB ECX,456789ABH456789ABH;ADCADC和和SBBSBB对标志位的影响:对标志位的影响:OF SF ZF AF PF CFOF SF
41、ZF AF PF CF X X X X X X X X X X X X43ADD 和ADC、SUB和SBB经常配合使用,完成64位加、减法运算。例:ADD EAX,ECX;EAX (EAX)+(ECX)ADC EBX,EDX;EBX (EBX)+(EDX)+CFSUB EAX,ECX;EAX (EAX)-(ECX)SBB EBX,EDX;EBX (EBX)-(EDX)-CF加1/减1指令INC/DEC格式:INC OP1;OP1 OP1+1,置标志位 mem reg 44格式:DEC OP1 ;OP1 OP1-1,置标志位 mem reg功能:功能:INCINC使操作数的值加使操作数的值加1
42、1;DECDEC使操作数的值减使操作数的值减1,1,常用于修改计数器或地址指针。常用于修改计数器或地址指针。例:下面是从例:下面是从300H300H端口输出端口输出256256个字节数据的程序段:个字节数据的程序段:BUFFER DB 12BUFFER DB 12,3434,MOV CX MOV CX,256256 MOV SI MOV SI,OFFSET BUFFEROFFSET BUFFER MOV DX MOV DX,300H300HNEXT NEXT:MOV ALMOV AL,SISI OUT DX OUT DX,ALAL INC SI INC SI ;地址加;地址加1 1,取下一个数
43、,取下一个数 LOOP NEXT LOOP NEXT ;未完,继续;未完,继续45INCINC和和DECDEC对标志位的影响:对标志位的影响:OF SF ZF AF PF OF SF ZF AF PF X X X X X X X X X X 交换加法指令交换加法指令XADDXADD 格式:格式:XADD OP1XADD OP1,OP2OP2;OP1 OP1+OP2OP1 OP1+OP2 OP2 OP1 OP2 OP1 功能:功能:OP1OP1与与OP2OP2相加,结果存于相加,结果存于OP1OP1中,并将中,并将OP1OP1的值送的值送OP2OP2中。中。例:例:XADD EAXXADD EA
44、X,ECX ECX;EAX EAX (EAXEAX)+(ECXECX)ECX ECX (EAXEAX)变反指令变反指令NEGNEG 格式:格式:NEG OP1 NEG OP1;OP1 0-OP1OP1 0-OP1,置标志位,置标志位 功能:求功能:求OP1OP1的相反数。的相反数。46例:NEG AL;AL 0-(AL)若(AL)=13H,执行NEG指令后,(AL)=EDH比较指令CMP格式:CMP OP1,OP2;OP1-OP2,置标志位 reg,reg reg,mem reg,imm mem,reg mem,imm功能:将OP1减去OP2,但结果不存在OP1中,只使结果影响标志位。CMP指
45、令用于比较OP1与OP2的大小,由标志位来反映两数的关系(见表A)。A-B CF ZF SF OF A=B 0 1 0 0 AB 0 0 -AB -0 0 0表A 比较并交换指令CMPXCHG 格式:格式:CMPXCHG OP1CMPXCHG OP1,OP2OP2 功能:将功能:将OP1OP1与累加器(与累加器(ALAL、AXAX或或EAXEAX)的内容进行)的内容进行比较,若相等则将比较,若相等则将OP2OP2存于存于OP1OP1中;否则将中;否则将OP1OP1送到累加送到累加器中。例:器中。例:CMPXCHG CXCMPXCHG CX,DXDX;若(;若(CXCX)=(AXAX)则则CX
46、CX (DXDX),否则),否则AX (CXAX (CX)48无符号数乘法指令无符号数乘法指令MULMUL 格式:格式:MUL OP1MUL OP1 reg reg mem mem 功能:被乘数隐含在累加器中(功能:被乘数隐含在累加器中(ALAL,AXAX,EAXEAX),),OP1OP1为乘数。字节运算时乘积返回到为乘数。字节运算时乘积返回到AXAX;字运算时乘积;字运算时乘积 返返 回回 到到 DXDX:AXAX;双;双 字字 运运 算算 时时 乘乘 积积 返返 回回 到到 EDXEDX:EAXEAX。例:例:MUL CLMUL CL;AX AX (ALAL)*(CLCL)MUL BXMU
47、L BX;DXDX:AX AX (AXAX)*(BXBX)MUL DWORDESIMUL DWORDESI;EDXEDX:EAX EAX (EAXEAX)*(ESIESI)MULMUL指令影响标志位指令影响标志位 OFOF和和 CFCF:若积的高字节、字或双字为若积的高字节、字或双字为“0”0”,则,则OFOF、CFCF清清“0”0”,否否则则OFOF、CFCF置置“1”1”。49 有符号乘法指令有符号乘法指令IMULIMUL 指令格式有下列三种指令格式有下列三种:(1)(1)单操作数单操作数:IMUL OP1:IMUL OP1 reg reg mem mem 功能:被乘数隐含在累加器中(功能
48、:被乘数隐含在累加器中(ALAL,AXAX,EAXEAX),),OP1OP1为乘数。字节运算时乘积返回到为乘数。字节运算时乘积返回到AXAX;字运算时乘;字运算时乘积积 返返 回回 到到 DXDX:AXAX;双;双 字字 运运 算算 时时 乘乘 积积 返返 回回 到到 EDXEDX:EAXEAX。(2)(2)双操作数双操作数:IMUL OP1,OP2:IMUL OP1,OP2 reg,reg reg,reg reg,mem reg,mem reg,imm reg,imm功能:功能:OP1OP1乘以乘以OP2,OP2,积存放在积存放在OP1OP1中。中。50(3)三操作数:IMUL OP1,OP
49、2,OP3 reg,reg,imm reg,mem,imm 功能:OP2乘以OP3,积存放在OP1中。例如:IMUL DL ;AX (AL)*(DL)IMUL EBX ;EDX:EAX (EAX)*(EBX)IMUL BL,CL ;BL (BL)*(CL)IMUL BL,CL,4 ;BL (BL)*(CL)*4IMUL指令影响标志位 OF 和 CF若积的高字节、字或双字不是积的符号位扩展,则OF、CF置“1”,否则OF、CF清“0”。51除法指令DIV/IDIV 格式:格式:DIV OP1 DIV OP1;无符号除法;无符号除法 regreg mem mem IDIV OP1 IDIV OP1
50、;有符号除法;有符号除法 regreg mem mem 功能:功能:字节运算时,被除数隐含在字节运算时,被除数隐含在AXAX中,中,OP1OP1为字节除数,为字节除数,商存入商存入ALAL,余数存入,余数存入AHAH。字运算时,被除数隐含在字运算时,被除数隐含在DXDX:AXAX中,中,OP1OP1为字除为字除数,商存入数,商存入AXAX,余数存入,余数存入DXDX 双字运算时,被除数隐含在双字运算时,被除数隐含在EDXEDX:EAXEAX中,中,OP1OP1为为双字除数,商存入双字除数,商存入EAXEAX,余数存入,余数存入EDXEDX。52 例如:例如:DIV BL DIV BL;(;(A