《汇编材料 第3章 80X86的指系统和寻址方式.ppt》由会员分享,可在线阅读,更多相关《汇编材料 第3章 80X86的指系统和寻址方式.ppt(136页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章 80X86的指令系统和寻址方式难重点难重点重点理解8086常用指令的功能,熟悉80X86的各种寻址方式 指令系统指令系统 一组指令的集合一组指令的集合 操作码操作码 操作数操作数 .操作操作数数指令指令 寻址方式寻址方式 与数据有关的寻址方式与数据有关的寻址方式 与转移地址有关的寻址方式与转移地址有关的寻址方式1.8086的寻址方式的寻址方式与数据有关的寻址方式与数据有关的寻址方式:以以 MOV 指令为例指令为例(MOVMOV指令格式:指令格式:MOV MOV reg/mem,SRCreg/mem,SRC)立即寻址立即寻址 MOV AX,3069H寄存器寻址寄存器寻址 MOV AL,B
2、H直接寻址直接寻址 MOV AX,2000H 寄存器间接寻址寄存器间接寻址 MOV AX,BX 寄存器相对寻址寄存器相对寻址 MOV AX,COUNT SI 基址变址寻址基址变址寻址 MOV AX,BP DI 相对基址变址寻址相对基址变址寻址 MOV AX,MASK BX SI 存储器寻址存储器寻址(1)立即寻址方式:操作数直接在指令中给出,即操立即寻址方式:操作数直接在指令中给出,即操作数随指令存放于代码段中。作数随指令存放于代码段中。指令格式:MOVAL,5MOVAX,3064HMOVAL,AMOVAX,1946H注意:注意:*只能用于只能用于SRC字段字段MOV40H,AL*SRC和和D
3、ST的字长一致的字长一致MOVAH,3064H*此方式不能对段寄存器和标志寄存器赋值。此方式不能对段寄存器和标志寄存器赋值。(2)寄存器寻址方式:操作数存于寄存器中,指令寄存器寻址方式:操作数存于寄存器中,指令中指定寄存器号。中指定寄存器号。MOVAX,CXMOVAL,BHMOVAX,3064H注意:注意:*字节寄存器只有字节寄存器只有AHALBHBLCHCLDHDL*SRC和和DST的字长一致的字长一致MOVAH,BX*CS不能用不能用MOV指令改变指令改变MOVCS,AX(3)直接寻址方式:操作数存放于存储单元中,该存直接寻址方式:操作数存放于存储单元中,该存储单元的储单元的16位偏移地址
4、(位偏移地址(EA)紧跟在操作码之后,直紧跟在操作码之后,直接包含在指令中,存放在代码段中。接包含在指令中,存放在代码段中。例例:MOV AX,2000H EA=2000H,假设假设(DS)=3000H,那么那么PA=32000H5030 32000AH AL3050(AX)=3050H例:例:MOV BX,1000H注意:注意:*隐含的段为数据段隐含的段为数据段DS*若若操作数不在数据段而是在其他段(如附加段)中,操作数不在数据段而是在其他段(如附加段)中,则则可使用段跨越前缀可使用段跨越前缀MOVAX,ES:2000H*操作数地址也可由变量(符号地址)表示操作数地址也可由变量(符号地址)表
5、示,但要但要注意变量的属性注意变量的属性VALUEDB10(在(在数据段中定义)数据段中定义)MOVAH,VALUE MOVAX,VALUE MOVAX,WORDPTRVALUE 例:MOV AX,3000H低地址低地址高地址高地址CS段段操作码操作码00H30H34H12H34H12HAXDS段段5000053000DS5000 0300053000+(4)寄存器间接寻址:操作数存于存储单元中,该存)寄存器间接寻址:操作数存于存储单元中,该存储单元的储单元的EA存放在基址寄存器存放在基址寄存器BX、BP或变址寄存或变址寄存器器SI、DI中。中。MOVAX,BXPA=16d(DS)+(BX)M
6、OVAX,ES:BXPA=16d(ES)+(BX)MOVAX,BPPA=16d(SS)+(BP)例:例:MOVCX,DI注意:注意:*用用BX存放存放EA时,隐含的段为数据段;而用时,隐含的段为数据段;而用BP时,时,则隐含的段为堆栈段,同样可以使用段跨越前缀。则隐含的段为堆栈段,同样可以使用段跨越前缀。*不允许使用不允许使用AX、CX、DX存放存放EAMOVAX,CX*SRC和和DST的字长一致的字长一致MOVDL,BX;BX指示一个字节单元指示一个字节单元MOVDX,BX;BX指示一个字单元指示一个字单元*适于数组、字符串、表格的处理适于数组、字符串、表格的处理低地址低地址高地址高地址CS
7、段段操作码操作码34H12H34H12HAXSS段段7000073000SS7000 0300073000+例:例:MOV AX,BPBP 有效地址有效地址=(BX)(BP)8位位(SI)16位位(DI)+位移量位移量(5)寄存器相对寻址方式:操作数的寄存器相对寻址方式:操作数的EA是一个基址是一个基址寄存器(寄存器(BX,BP)或变址寄存器(或变址寄存器(SI,DI)的内容的内容和指令中指定的和指令中指定的8位或位或16位位移量之和。实际上是在位位移量之和。实际上是在寄存器间接寻址的基础上加了一个寄存器间接寻址的基础上加了一个8位或位或16位的位移位的位移量。因此,该方式与寄存器间接寻址方式
8、类似。量。因此,该方式与寄存器间接寻址方式类似。指令格式指令格式:MOV AX,COUNTSI MOV AX,COUNTSI 或或 MOV AX,COUNT+SIMOV AX,COUNT+SI假设假设(DS)=(DS)=4 4000H,000H,(SI)=(SI)=010100H,COUNT=00H,COUNT=2 2000H000H,则则:PA=PA=42142100H00H假设假设(42142100H)=00H)=00500050H,H,那那么么 (AX)=(AX)=00500050H H*适于数组、字符串、表格的处理适于数组、字符串、表格的处理*这个这个COUNT在使用前要在前面定义,它
9、是一个在使用前要在前面定义,它是一个符号地址。符号地址。低地址低地址高地址高地址CS段段操作码操作码00H15H34H12H34H12HAXFS段段7000073500BX150073500+例:例:MOV DX,BX+1500DS7000 02000(6)基址变址寻址方式:基址变址寻址方式:EA是一个基址寄存器是一个基址寄存器(BX,BP)和一个变址寄存器(和一个变址寄存器(SI,DI)的内容的内容之和。两个寄存器号均在指令中指定。之和。两个寄存器号均在指令中指定。指令格式:指令格式:MOV AX,BX DIMOV AX,BX DI MOV AX,BX+DI MOV AX,BX+DI MOV
10、 AX,ES:BX SI MOV AX,ES:BX SI MOV AX,BX SIMOV AX,BX SI有效地址有效地址=(BX)(SI)(BP)(DI)+注意:注意:*使用使用BX时,隐含的段为数据段;使用时,隐含的段为数据段;使用BP时,则时,则为堆栈段为堆栈段*适于数组、字符串、表格的处理适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合MOVAX,BXBP MOVAX,SIDI(7)相对基址变址寻址方式:操作数的相对基址变址寻址方式:操作数的EA是一个基是一个基址寄存器和一个变址寄存器的内容和一个址寄存器和一个变址寄存器
11、的内容和一个8位或位或16位位位移量之和。实际上就是在基址变址寻址方式的基础位移量之和。实际上就是在基址变址寻址方式的基础上加了一个上加了一个8位或位或16位的位移量,因此两者类似。位的位移量,因此两者类似。MOV AX,MASK BX SI 或或 MOV AX,MASK BX+SI 或或 MOV AX,MASK+BX+SI例:例:MOV AX,ARRAYBXSI 有效地址有效地址=(BX)(SI)8位位(BP)(DI)16位位+位移量位移量课堂练习:已知(课堂练习:已知(DS)2000H,(,(BX)0100H,(,(SI)0002H,(,(20100H)12H,(20101H)34H,(,
12、(20102H)56H,(20103H)78H.(21200H)2AH,(21201H)4CH,(,(21202H)B7H,(21203H)65H问:试指出下列寻址方式,其物理地址值是多少?当问:试指出下列寻址方式,其物理地址值是多少?当执行了下列指令后执行了下列指令后AX寄存器中的值是多少?寄存器中的值是多少?1、MOVAX,1200H2、MOVAX,BX3、MOVAX,1200H4、MOVAX,BX5、MOVAX,1100BX6、MOVAX,BXSI7、MOVAX,1100BXSI访问存储器的方式访问存储器的方式 默认的默认的段寄存器段寄存器可可跨越的跨越的段寄存器段寄存器偏移地址偏移地址
13、取取指令指令 CS 无无 IP堆栈操作堆栈操作 SS 无无 SP一般数据访问一般数据访问 DS CS ES SS 有效地址有效地址EABP作为基址的寻址作为基址的寻址 SS CS DS ES BP串操作的源操作数串操作的源操作数 DS CS ES SS SI串操作的目的操作数串操作的目的操作数 ES 无无 DI段段 寄寄 存存 器器 的的 使使 用用 规规 定定例例:编写一段显示字符串编写一段显示字符串STRING的程序的程序DATA SEGMENTDATA SEGMENT STRING DB HAPPY NEW YEAR!,0DH,0AH,$STRING DB HAPPY NEW YEAR!
14、,0DH,0AH,$COUNT DW 17 COUNT DW 17 DATA ENDS DATA ENDS(1)直接寻址直接寻址 movmov dl,string dl,string movmov ah,2 ah,2 intint 21h ;21h ;显示字符显示字符 HH movmov dl,string+1 dl,string+1 movmov ah,2 ah,2 intint 21h ;21h ;显示字符显示字符 AA :(2)寄存器间接寻址寄存器间接寻址movmov cxcx,count ;,count ;movmov cxcx,17 ,17 movmov bxbx,offset st
15、ring;string,offset string;string的偏址的偏址 bxbxNext:Next:movmov dl,dl,bxbx movmov ah,2 ah,2 intint 21h ;21h ;显示一个字符显示一个字符 inc inc bxbx loop next ;loop next ;循环指令循环指令(3)寄存器相对寻址寄存器相对寻址movmov cxcx,count ;,count ;movmov cxcx,17 ,17 movmov si si,0 ,0 Next:Next:movmov dl,dl,stringsistringsi ;movmov dl,dl,stri
16、ng+sistring+si movmov ah,2 ah,2 intint 21h ;21h ;显示一个字符显示一个字符 inc inc si si loop next ;loop next ;循环指令循环指令(4)基址变址寻址基址变址寻址movmov cxcx,count ;,count ;movmov cxcx,17 ,17 movmov bxbx,offset string;string,offset string;string的偏址的偏址 bxbx movmov si si,0,0Next:Next:movmov dl,dl,bxbx si si ;movmov dl,dl,bx+s
17、ibx+si movmov ah,2 ah,2 intint 21h ;21h ;显示一个字符显示一个字符 inc inc si si loop next ;loop next ;循环指令循环指令(5)DOS显示字符串功能显示字符串功能movmov dxdx,offset string ;string,offset string ;string的偏址的偏址 dxdx ;lea ;lea dxdx,string,string movmov ah,9 ah,9 intint 21h ;21h ;显示一串字符显示一串字符与转移地址有关的寻址方式:与转移地址有关的寻址方式:段内寻址段内寻址 段内直接寻
18、址段内直接寻址 JMP NEAR PTR NEXT 段内间接寻址段内间接寻址 JMP TABLE BX 段间寻址段间寻址 段间直接寻址段间直接寻址 JMP FAR PTR NEXT 段间间接寻址段间间接寻址 JMP DWORD PTR BX 前面介前面介绍的与数据有关的的与数据有关的寻址方式最址方式最终确定的是一确定的是一个数据的地址,而个数据的地址,而这里介里介绍的与的与转移地址有关的移地址有关的寻址方式最址方式最终确定一条指令的地址。确定一条指令的地址。顺序序执行的指令行的指令地址是由指令指地址是由指令指针寄存器寄存器IP自自动增量形成的,而程增量形成的,而程序序转移的地址必移的地址必须由
19、由转移移类指令和指令和CALL指令指出指令指出。(1)段内直接寻址段内直接寻址转向的有效地址转向的有效地址=当前当前(IP)+位移量位移量(8bit/16bit)注意:位移量是有符号数注意:位移量是有符号数例例:JMP NEAR PTR NEXT 近转移近转移 -32768 +32767 JMP SHORT NEXT 短转移短转移 -128 +127 (2)段内间接寻址段内间接寻址 转向的有效地址是一个寄存器或存储单元的内容。转向的有效地址是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到)例:例:TABLE=20ATABLE=
20、20A1 1H (BX)=1256H (SI)=528EHH (BX)=1256H (SI)=528EH(DS)=2000H (232F8H)=3280H (264E4H)=2450H(DS)=2000H (232F8H)=3280H (264E4H)=2450H则则:JMPBX;(IP)=1256HJMPTABLEBXJMPWORD PTRTABLEBX;(IP)=3280HJMPBXSIJMPWORD PTRBXSI;(IP)=2450H例:例:JMPARRAYBX段内段内转移只修改转移只修改IP而不修改而不修改CS;但是段间转移则不仅要修改但是段间转移则不仅要修改IP而且要修改而且要修改
21、CS。code1 segmentcode1 segment jmpjmp far far ptrptr next next code1 endscode1 endscode2 segment code2 segment next:next:.code2 endscode2 ends(3)段间直接寻址段间直接寻址 用指令中提供的转向段地址和偏移地址取代用指令中提供的转向段地址和偏移地址取代CS 和和 IP 例例:(4)段间间接寻址段间间接寻址 用存储器中的两个相继字的内容取代用存储器中的两个相继字的内容取代CS和和IP(存储单元的地址可用存储器寻址方式得到存储单元的地址可用存储器寻址方式得到)例
22、:例:JMPDWORD PTRINTERS+BXPA=(DS)PA=(DS)2 24 4+(BX)+INTERS+(BX)+INTERS (PA+1,PA)IP (PA+1,PA)IP (PA+3,PA+2)CS (PA+3,PA+2)CS例:例:JMP DWORD PTR BX第第3章章 练习练习Page 107 3.1 3.3 3.5 3.7 3.11 2.8086的指令系统的指令系统 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令(放到第五章讲)(放到第五章讲)控制转移指令控制转移指令(放到第五章讲)(放到第五章讲)处理机控制与杂项操作指令处理机控制与
23、杂项操作指令重点关注:重点关注:指令的汇编格式指令的汇编格式标号标号:指令助记符指令助记符目的操作数目的操作数,源操作数源操作数;注释;注释指令的基本功能指令的基本功能该指令能够实现何种操作。通常该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式指令支持的寻址方式该指令中的操作数可以采用该指令中的操作数可以采用何种寻址方式何种寻址方式指令的执行对标志位的影响指令的执行对标志位的影响该指令执行后是否对该指令执行后是否对各个标志位有影响,以及如何影响各个标志位有影响,以及如何影响指令的特殊要求指令的特殊要求该指令其
24、他需要特别注意的地方,该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等用的寄存器等在使用指令时必须注意的问题:在使用指令时必须注意的问题:n在单操作数的指令中,如果操作数是存储器寻址,在单操作数的指令中,如果操作数是存储器寻址,则一般需指明操作数的类型。则一般需指明操作数的类型。qINC2000H INCBYTEPTR2000HINCARRAY;ARRAY在数据段有定义在数据段有定义n在双操作数的指令中,两个操作数不能全为存在双操作数的指令中,两个操作数不能全为存储器寻址;两个操作数一般不能是段寄存器储器寻址
25、;两个操作数一般不能是段寄存器(除(除MOV指令外,在指令外,在MOV指令中指令中CS也不能做也不能做为目的操作数);目的操作数不能是立即数、为目的操作数);目的操作数不能是立即数、CS;两个操作数的类型必须保持一致。;两个操作数的类型必须保持一致。qMOVARRAY,BX qADDAX,DS qMOVCS,AX qADD1234H,BX qADDAX,ARRAY(ARRAY是字节数据是字节数据)qMOV2000H,34H 数据传送指令:数据传送指令:通用数据传送指令通用数据传送指令MOV、PUSH、POP、XCHG 累加器专用传送指令累加器专用传送指令IN和和OUT(放到第八章讲)、(放到第
26、八章讲)、XLAT 地址传送指令地址传送指令LEA、LDS、LES 标志寄存器传送指令标志寄存器传送指令LAHF、SAHF、PUSHF、POPF 类型转换类型转换指令指令CBW、CWD传送指令:传送指令:MOV DST,SRC执行操作:执行操作:(DST)(SRC)注意注意:*DST、SRC 不能同时为段寄存器不能同时为段寄存器 MOV DS,ES *立即数不能直接送段寄存器立即数不能直接送段寄存器 MOV DS,2000H *DST 不能是立即数和不能是立即数和CS*DST、SRC 不能同时为存储器寻址不能同时为存储器寻址*不影响标志位不影响标志位*DST、SRC中必须有一个是寄存器(除中必
27、须有一个是寄存器(除SRC为立即为立即数)数)*指令指针指令指针IP,不能作为,不能作为MOV指令的操作数;指令的操作数;通用数据传送指令通用数据传送指令MOV AX,2000HMOV DS,AXMOV指令的变通方法指令的变通方法功能描述功能描述不正确的指令不正确的指令可选的解决方法可选的解决方法把把DS的值的值传送给传送给ESMOVES,DSMOVAX,DSMOVES,AX把把100H传传给给DSMOVDS,100HMOVAX,100HMOVDS,AX把字变量把字变量VARB的的值传送给值传送给字变量字变量VARAMOVVARA,VARBMOVAX,VARBMOVVARA,AX进栈指令:进栈
28、指令:PUSHSRC执行操作:执行操作:(SP)(SP)2(SP)+1,(SP)(SRC)出栈指令:出栈指令:POPDST执行操作:执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2堆堆栈栈:先先进进后后出出的的存存储储区区,段段地地址址存存放放在在SSSS中中,SP在在任任何何时时候候都都指指向向栈栈顶顶,进进出出栈栈后后自自动动修改修改SPSP。堆栈常用来堆栈常用来临时存放数据临时存放数据传递参数传递参数保存和恢复寄存器保存和恢复寄存器例:假设例:假设 (AX)=2107 H,(AX)=2107 H,执行执行 PUSH AXPUSH AX*(SP)PUSH AX 执行前执行前(
29、SP)*07H07H21H21H低低地址地址 高地址高地址PUSH AX 执行后执行后进栈方向进栈方向(SP)*07H07H21H21HPOP BX 执行执行前前(SP)*07H07H21H21H低低地址地址 高地址高地址 POP BX 执行后执行后 (BX)=2107H例:例:POP BX出栈方向出栈方向例:例:PUSH DS PUSH DS 一般在程序开始时将一般在程序开始时将 SUB AX,AX SUB AX,AX DS和和AX(0)压入)压入 PUSH AX PUSH AX 堆栈堆栈 RET RET;程序执行完返回时,用程序执行完返回时,用RETRET指令指令 将将DSDS和和AXAX
30、弹出,保证程序的正常弹出,保证程序的正常 结束并调用操作系统。结束并调用操作系统。例:例:PUSHAXPUSHBXPUSHCX;其间用到其间用到AX、BX、CXPOPCX;后进先出;后进先出POPBXPOPAX注意注意:*堆栈操作必须以字或双字为单位。堆栈操作必须以字或双字为单位。*不影响标志位不影响标志位*不能用立即寻址方式不能用立即寻址方式PUSH1234H(286及其后继机型允许立即数进栈)及其后继机型允许立即数进栈)*DST不能是不能是CSPOPCS*8086/8088中的中的PUSHSP指令所压入的指令所压入的SP是已修改了的是已修改了的SP新值(即新值(即SP2之后的新之后的新值)
31、,而值),而PUSHESP指令压入栈的却是指令压入栈的却是ESP在执行该指令之前的旧值。在执行该指令之前的旧值。所有寄存器进栈指令:所有寄存器进栈指令:PUSHA/PUSHAD其功能是依次把寄存器其功能是依次把寄存器AX、CX、DX、BX、SP、BP、SI和和DI压栈压栈/把寄存器把寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI和和EDI等压栈。等压栈。所有寄存器出栈指令;所有寄存器出栈指令;POPA/POPAD 交换指令:交换指令:XCHG OPR1,OPR2 执行操作:执行操作:(OPR1)(OPR2)注意注意:*指令中的两个操作数均可为寄存器指令中的两个操作数均可为寄存器或
32、内存单元,但必须有一个在寄存器中或内存单元,但必须有一个在寄存器中 *不影响标志位不影响标志位 *不允许使用段寄存器不允许使用段寄存器 例:例:XCHG BX,BP+SI XCHG AL,BH例:若例:若BX=F034H,BP=B218H;执行指令执行指令XCHGBX,BP结果为:结果为:BX=B218H,BP=F034H换码指令:换码指令:XLAT或或XLATOPR执行操作:执行操作:(AL)(BX)+(AL)这这条条指指令令根根据据AL寄寄存存器器提提供供的的位位移移量量,将将BX指指示示的的字字节节表表格格中中的的代代码码换换存存在在AL中中。该该指指令令还还可可写写为为:XLATOPR
33、,OPR为为字字节节表表格格的的首首地地址址,因因为为OPR所所表表示示的的偏偏移移地地址址已已存存入入BX寄寄存存器器,所所以以OPR在在换换码码指指令令中中可可有可无,有则可提高程序的可读性。有可无,有则可提高程序的可读性。例:例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令执行后指令执行后(AL)=33H(BX)30 H F004031 H F0041(AL)=3 32 H F0042 33 H F0043TABLE(DS)=F000H注意注意:*主主要要用用于于查查表表(代代码码转转换换),表表格格需需事事先先建建立。立。*不影响标志位不
34、影响标志位*字节表格字节表格(长度不超过长度不超过256)首地址首地址(BX)*需转换的代码位移量需转换的代码位移量(AL)*一般无操作数一般无操作数 地址传送指令地址传送指令 有效地址送寄存器指令:有效地址送寄存器指令:LEA REG,SRC 执行操作:执行操作:(REG)SRC 指针送寄存器和指针送寄存器和DS指令:指令:LDS REG,SRC 执行操作:执行操作:(REG)(SRC)(DS)(SRC+2)相继二字相继二字 寄存器寄存器、DS 指针送寄存器和指针送寄存器和ES指令:指令:LES REG,SRC 执行操作:执行操作:(REG)(SRC)(ES)(SRC+2)相继二字相继二字
35、寄存器寄存器、ES 例:例:LEA BX,BX+SI+0F62H LDS SI,10H LES DI,BXMOV BX,TABLE ;(BX)=0040HMOV BX,OFFSET TABLE ;(BX)=1000HLEA BX,TABLE ;(BX)=1000HLDS BX,TABLE ;(BX)=0040H ;(DS)=3000HLES BX,TABLE ;(BX)=0040H ;(ES)=3000H40 H00 H00 H30 H TABLE(DS):1000Hn注意注意:*不影响标志位不影响标志位*REG不能是不能是段寄存器段寄存器*SRC必须为存储器寻址方式必须为存储器寻址方式 标志
36、寄存器传送指令标志寄存器传送指令 标志送标志送AH指令:指令:LAHF 执行操作:执行操作:(AH)(FLAGS的低字节的低字节)AH送标志寄存器指令:送标志寄存器指令:SAHF 执行操作:执行操作:(FLAGS的低字节的低字节)(AH)标志进栈指令:标志进栈指令:PUSHF 执行操作:执行操作:(SP)(SP)-2 (SP)+1,(SP)(FLAGS)标志出栈标志出栈指令:指令:POPF 执行操作:执行操作:(FLAGS)(SP)+1,(SP)(SP)(SP)+2注意:注意:*LAHF和和SAHF指令隐含的操作寄存器是指令隐含的操作寄存器是AH和和FLAGS*LAHF和和PUSH不影响标志位
37、,不影响标志位,SAHF和和POPF则由装入的值来确定标志位的值。则由装入的值来确定标志位的值。类型转换指令类型转换指令 CBW AL AX执行操作:若执行操作:若(AL)的最高有效位为的最高有效位为0,则,则(AH)=00H 若若(AL)的最高有效位为的最高有效位为1,则,则(AH)=FFH CWD AX (DX,AX)执行操作:执行操作:若若(AX)的最高有效位为的最高有效位为0,则,则(DX)=0000H 若若(AX)的最高有效位为的最高有效位为1,则,则(DX)=FFFFH 例:例:(AX)=0BA45H CBW ;(AX)=0045H CWD ;(DX)=0FFFFH (AX)=0B
38、A45H注意注意:*无操作数指令无操作数指令*隐含对隐含对AL或或AX进行符号扩展进行符号扩展*不影响不影响条件标志位条件标志位算术指令:算术指令:加法加法指令指令 ADD、ADC、INC 减法减法指令指令 SUB、SBB、DEC、NEG、CMP 乘法乘法指令指令 MUL、IMUL 除法除法指令指令 DIV、IDIV 十进制调整十进制调整指令指令 DAA、DAS、AAA、AAS、AAM、AAD 加法指令加法指令 加法指令:加法指令:ADD DST,SRC 执行操作:执行操作:(DST)(SRC)+(DST)带进位加法指令:带进位加法指令:ADC DST,SRC 执行操作:执行操作:(DST)(
39、SRC)+(DST)+CF 加加1指令:指令:INC OPR 执行操作:执行操作:(OPR)(OPR)+1注意注意:*除除INC指令指令不影响不影响CF标志外,均对条件标标志外,均对条件标志位有影响。志位有影响。加法指令对加法指令对条件标志位条件标志位的影响的影响CF 位表示位表示 无符号数无符号数 相加的溢出。相加的溢出。OF 位表示位表示 带符号数带符号数 相加的溢出。相加的溢出。1 结果为负结果为负0 否则否则SF=1 结果为结果为00 否则否则ZF=1 和的最高有效位和的最高有效位 有有 向高位的进位向高位的进位0 否则否则CF=1 两个操作数符号相同,而结果符号与之相反两个操作数符号
40、相同,而结果符号与之相反0 否则否则OF=计算机在执行运算时,并不区别操作数是带符号计算机在执行运算时,并不区别操作数是带符号数还是无符号数,一律按上述规则设置条件码,数还是无符号数,一律按上述规则设置条件码,因此,程序员要清楚当时处理的是什么类型的数因此,程序员要清楚当时处理的是什么类型的数据。例如,当加法运算结果的最高有效位为据。例如,当加法运算结果的最高有效位为1时,时,机器将机器将SF置置1。如果参加运算的是两个带符号数,。如果参加运算的是两个带符号数,那么和的最高有效位是符号位,那么和的最高有效位是符号位,SF置置1说明结果说明结果是一个负数。如果参加运算的是两个无符号数,是一个负数
41、。如果参加运算的是两个无符号数,那么和的最高有效位也是数值位,此时那么和的最高有效位也是数值位,此时SF置置0或或置置1都失去了表示正负数的意义。都失去了表示正负数的意义。对带符号数和无符号数,它们表示结果溢出的对带符号数和无符号数,它们表示结果溢出的条件标志位也是不同的。上述条件标志位也是不同的。上述OF位的设置条位的设置条件显然只符合带符号数的溢出情况,件显然只符合带符号数的溢出情况,OF=1表表示运算结果是错误的。而无符号数溢出(运算示运算结果是错误的。而无符号数溢出(运算结果超出了有限位的表示范围)时,表现为最结果超出了有限位的表示范围)时,表现为最高有效位产生进位,因此,高有效位产生
42、进位,因此,CF=1是无符号数是无符号数溢出的标志。另外,在双字长数运算时,低位溢出的标志。另外,在双字长数运算时,低位字相加设置的字相加设置的CF,说明低位字向高位字有无,说明低位字向高位字有无进位的情况。进位的情况。举例举例:n=8 bit 带符号数带符号数(-128127),无符号数无符号数(0255)0 0 0 0 0 1 0 0 +0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:带:(+4)+(+11)=+15 OF=0无:无:4+11=15 CF=0带符号数和无符号数都不溢出带符号数和无符号数都不溢出带符号数和无符号数都溢出带符号数和无符号数都溢出 1 0 0 0
43、 0 1 1 1 +1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0带:带:(-121)+(-11)=+124 OF=1无:无:135+245=124 CF=1 0 0 0 0 1 0 0 1 +0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 带带:(+9)+(+124)=-123 OF=1 无无:9+124=133 CF=0带符号数溢出带符号数溢出无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 +1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0带:带:(+7)+(-5)=+2 OF=0无:无:7+251=2 CF=1例:双精度数的
44、加法例:双精度数的加法 (DX)=0002H (AX)=0F365H (BX)=0005H (CX)=8100H 指令序列指令序列 ADD AX,CX ;(1)ADC DX,BX ;(2)(1)执行后,执行后,(AX)=7465H CF=1 OF=1 SF=0 ZF=0 (2)执行后,执行后,(DX)=0008H CF=0 OF=0 SF=0 ZF=0 减法指令减法指令减法指令:减法指令:SUB DST,SRC 执行操作:执行操作:(DST)(DST)-(SRC)带借位减法指令:带借位减法指令:SBB DST,SRC 执行操作:执行操作:(DST)(DST)-(SRC)-CF减减1指令:指令:
45、DEC OPR 执行操作:执行操作:(OPR)(OPR)-1求补指令:求补指令:NEGOPR执行操作:执行操作:(OPR)-(OPR)比较指令:比较指令:CMPOPR1,OPR2执行操作:执行操作:(OPR1)-(OPR2)注意注意:*除除DEC指令指令不影响不影响CF标志外,均对条件标志标志外,均对条件标志位有影响。位有影响。减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)的影响:的影响:CF 位表示位表示 无符号数无符号数 减法的溢出。减法的溢出。OF 位表示位表示 带符号数带符号数 减法的溢出。减法的溢出。1 被减数的最高有效位被减数的最高有效位 有有 向高位的借位向
46、高位的借位0 否则否则CF=1 两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0 否则否则OF=1 减法转换为加法运算时减法转换为加法运算时 无无 进位进位0 否则否则CF=或或举例举例:n=8 bit 带符号数带符号数(-128127),无符号无符号数数(0255)0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1带:带:(1)(2)=1 OF=0无:无:1 2=255 CF=1无符号数溢出无符号数溢出 0 0 0 0 00 0 1 +1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1带:带:(1)
47、(2)=1 OF=0无:无:1 2=255 CF=1无符号数溢出无符号数溢出CF表明无符号数相减结果溢出与否;表明无符号数相减结果溢出与否;OF表明带表明带符号数相减结果溢出与否。但在对符号数相减结果溢出与否。但在对CF和和OF位的设位的设置方法上减法和加法有所不同,下面对此做进一步置方法上减法和加法有所不同,下面对此做进一步说明:说明:CF=1二进制减法运算中最高有效位向高二进制减法运算中最高有效位向高位有借位(被减数减数,不够减的情况)位有借位(被减数减数,不够减的情况)CF=0二进制减法运算中最高有效位向高二进制减法运算中最高有效位向高位无借位(被减数位无借位(被减数减数,够减的情况)减
48、数,够减的情况)OF=1两数符号相反(正数负数,或负两数符号相反(正数负数,或负数正数),而结果符号与减数相同数正数),而结果符号与减数相同OF=0同符号数相减时,或不同符号数相同符号数相减时,或不同符号数相减,其结果符号与减数不同减,其结果符号与减数不同NEG 指令对指令对CF/OF的影响的影响0 操作数为操作数为01 否则否则CF=1 操作数为操作数为-128(字节运算)或(字节运算)或 操作数为操作数为-32768(字运算)(字运算)0 否则否则OF=0 0 0 1 1 1 1 0 +0 0 0 1 1 1 1 1指对无符号数指对无符号数(0255)1 0 0 0 0 1 1 1 +0
49、0 0 1 1 0 0 0CF 位表示位表示 无符号数无符号数 运算出错。运算出错。0 0 0 0 1 1 1 1 +0 0 0 1 1 0 0 0 0例例:x、y、z 均均为为双双精精度度数数,分分别别存存放放在在地地址址为为X,X+2;Y,Y+2;Z,Z+2的的存存储储 单单 元元 中中,用用 指指 令令 序序 列列 实实 现现w x+y+24-z,并并用用W,W+2单单元元存放存放wMOV AX,XMOV AX,XMOV DX,X+2MOV DX,X+2ADD AX,YADD AX,YADC DX,Y+2 ;x+yADC DX,Y+2 ;x+yADD AX,24ADD AX,24ADC
50、DX,0 ;ADC DX,0 ;考虑进位问题,考虑进位问题,x+y+24x+y+24SUB AX,ZSUB AX,ZSBB DX,Z+2 ;x+y+24-zSBB DX,Z+2 ;x+y+24-zMOV W,AXMOV W,AXMOV W+2,DX ;MOV W+2,DX ;结果存入结果存入W,W+2W,W+2单元单元 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令:MUL SRC 带符号数乘法指令:带符号数乘法指令:IMUL SRC 执行操作:执行操作:字节操作数字节操作数 (AX)(AL)*(SRC)字操作数字操作数 (DX,AX)(AX)*(SRC)注意注意:*AL(AX)为隐含的