第6章638086汇编指令系统_第1页
第6章638086汇编指令系统_第2页
第6章638086汇编指令系统_第3页
第6章638086汇编指令系统_第4页
第6章638086汇编指令系统_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

1、12014/066.3 8086微处理器汇编语言指令系统微处理器汇编语言指令系统6.3.1 8086微处理器汇编语言指令格式微处理器汇编语言指令格式例:例:START:MOV AL , 50H ;传送数据;传送数据 操作码操作码 标号标号: 操作数,操作数操作数,操作数 ;注释;注释 22014/061、标号、标号8086/8088汇编语言中标识符必须遵循的汇编语言中标识符必须遵循的规则规则: 1)标识符由字母)标识符由字母(az、AZ)、数字()、数字(09)或某些)或某些特殊字符(特殊字符(,-,?)组成;)组成;2)第一个字符必须是字母)第一个字符必须是字母(az、AZ)或某些特殊的)或

2、某些特殊的符号(符号(,-,?),),但但“?”不能单独作标识符;不能单独作标识符;3)标识符有效长度为)标识符有效长度为31个字符个字符,若超过,若超过31个字符,则只个字符,则只保留前面的保留前面的31个字符为有效标识符。个字符为有效标识符。 标号是给该指令所在地址取的名字,必须后跟冒号标号是给该指令所在地址取的名字,必须后跟冒号“:”,它可以缺省,是可供选择的标识符。它可以缺省,是可供选择的标识符。 32014/06寻址方式寻址方式是指是指CPU寻找操作数或操作数地址的方法。寻找操作数或操作数地址的方法。 对象:对象:目的操作数、源操作数目的操作数、源操作数立即数寻址立即数寻址寄存器寻址

3、寄存器寻址 直接寻址直接寻址 寄存器间接寻址寄存器间接寻址 变址寻址变址寻址 基址寻址基址寻址 基址基址-变址寻址变址寻址 6.3.2 8086微处理器汇编语言指令寻址方式微处理器汇编语言指令寻址方式42014/061. 立即数寻址立即数寻址指令中所用的指令中所用的8位或位或16位位操作数在指令中操作数在指令中。如如:MOVAL, 80H 操作码字节操作码字节12H存储器存储器AL指指令令码码AH34H12341234MOVAX, 1234H AL操作码字节操作码字节80H存储器存储器指指令令码码80H80H52014/06注意注意:v立即数只能作为源操作数。立即数只能作为源操作数。 v立即数

4、可以为立即数可以为8位,也可以为位,也可以为16位;规定位;规定立即数只能是立即数只能是整数整数,不能是小数、变量或,不能是小数、变量或者其他类型的数据。者其他类型的数据。 操作数在操作数在CPU的内部寄存器中的内部寄存器中2. 寄存器寻址寄存器寻址如:如:MOV AX, CXAXCX62014/06 如如: MOV SS, AXROL AH,1 16位位操作数:操作数:寄存器可以是寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP 8位位操作数:操作数:寄存器可以是寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL 72014/063. 直接寻址直接寻址 数据总是在存储器中数

5、据总是在存储器中,存储单元的有效地址由指令直接指出。,存储单元的有效地址由指令直接指出。如:如:设当前设当前(DS)=2000H MOV AL, 1064H21064H(DS)*10H=20000H20000H21064HAL操作码操作码641045代代码码段段数数据据段段4545 1064H82014/06 注意注意: 采用直接寻址方式时,采用直接寻址方式时,如果指令前面没有用如果指令前面没有用 前缀指明操作数在哪一段,则默认为段寄存器前缀指明操作数在哪一段,则默认为段寄存器 是数据段寄存器是数据段寄存器DS。 如果要对其它段寄存器所指出的存储区进行如果要对其它段寄存器所指出的存储区进行直接

6、寻址,则本条指令前必须用前缀指出段寄直接寻址,则本条指令前必须用前缀指出段寄存器名。存器名。 如如: MOV BX, ES: 3200H 92014/06 操作数一定在存储器中,存储单元的有效地址由寄操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器只能是存器指出,这些寄存器只能是BX、BP、SI和和DI之一,之一,即有效地址等于其中某一个寄存器的值:即有效地址等于其中某一个寄存器的值: 4. 寄存器间接寻址寄存器间接寻址EA=BXBPSIDI注注:如果指令前面没有用前缀指明具体的段寄存器,:如果指令前面没有用前缀指明具体的段寄存器,则寻址时默认的段寄存器通常为则寻址时默认的段寄

7、存器通常为DS。如果寄存器为。如果寄存器为BP时,则默认的段寄存器为时,则默认的段寄存器为SS。 102014/06 如如: MOV BX, SI MOV BP, AL 若若(DS)=3000H,(SS)2000H,(SI)=2000H, (BP)=1000H,(AL)=64H 5040MBX30000H(DS)*10H=30000H(SI)= 2000H+32000H32000H4050504064HMAL20000HSS 20000HBP 1000H+21000H21000H64H64H112014/06 寄存器相对寄存器相对寻址指令将变址寄存器的内容加上指令中给寻址指令将变址寄存器的内容

8、加上指令中给出的位移量,即可得到操作数的有效地址。出的位移量,即可得到操作数的有效地址。位移量可以为位移量可以为8位,也可以为位,也可以为16位。位。 EA=SIDI+8位位移量位位移量16位位移量位位移量 如:如:MOV SI+10H, AX5. 寄存器相对寻址寄存器相对寻址 若若 (DS)=3000H,(SI)=2000H,(AX)=4050H122014/06132014/06EA=BXBP+8位位移量位位移量16位位移量位位移量如:如:MOV CL, BX+1064H641045代代码码段段数数据据段段操作码CL454521000HBX 1000HDS 20000H20000H+ 10

9、64H22064H22064H142014/06若若 (DS)=3000H,(BX)=1000H,COUNT=1050H 如:如:MOV CX, COUNTBX 152014/06 操作数的有效地址是操作数的有效地址是1个基址寄存器个基址寄存器(BX或或BP)的内的内容加上一个变址寄存器容加上一个变址寄存器(SI或或DI)的内容。的内容。 将将BX、BP和和SI、DI寄存器组合起来进行间接寻址。寄存器组合起来进行间接寻址。 EA=BXBPSIDI8位位移量位位移量16位位移量位位移量 如如:MOV AH, COUNTBXDI6. 基址基址-变址寻址变址寻址若若 (DS)=4000H,(BX)=

10、1000H,(DI)=1500H,COUNT=1234H 162014/06注注:只要用上只要用上BP寄存器,那么默认的段寄存器就是寄存器,那么默认的段寄存器就是SS;在其;在其它情况下,默认的段寄存器均为它情况下,默认的段寄存器均为DS。如果操作数不在默认段,。如果操作数不在默认段,则要用前缀指出相应的段寄存器名。则要用前缀指出相应的段寄存器名。 允许带一个允许带一个8位或位或16位的位移量位的位移量相对的基址加变址相对的基址加变址寻址。寻址。 如如:MOV AX,BX+SI+0050H172014/06如:如:MOV BX+DI+1234H, AH3412代代码码段段数数据据段段操作码45

11、AH40000HDS:40000HBX: 0200H+DI: 0010H1234H454541444H41444H182014/066.3.3 8086微处理器汇编指令系统微处理器汇编指令系统一一. . 传送指令传送指令二二. . 算术运算类指令算术运算类指令三三. . 逻辑运算和移位指令逻辑运算和移位指令四四. . 控制类指令控制类指令五五. . 串操作指令串操作指令192014/066.3.3 80866.3.3 8086微处理器汇编指令系统微处理器汇编指令系统 - - 传送指令传送指令202014/061. 通用数据传送指令通用数据传送指令特点特点: 既可传送既可传送字节操作数(字节操作

12、数(8位),位),也可以传送也可以传送字字操作数(操作数(16位)。位)。 可实现以下各种传送:可实现以下各种传送:寄存器与寄存器寄存器与寄存器/存储器之间;存储器之间;立即数至寄存器立即数至寄存器/存储器;存储器;寄存器寄存器/存储器与段寄存器之间。存储器与段寄存器之间。(1)最基本的传送指令)最基本的传送指令 MOV MOVdest, src;(dest)(src) 一、传送一、传送指令指令212014/06如如:nMOVSI, BXnMOVAX, CSnMOVAL, 5nMOVBX, 5段寄存器段寄存器CSCS DS SS ES DS SS ES存储器存储器通用寄存器通用寄存器AX BX

13、 CX DXAX BX CX DXBP SP SI DIBP SP SI DIAL BL CL DLAL BL CL DLAH BH CH DHAH BH CH DH16位位8/16位位8/16位位16位位8/16位位立即数立即数nMOVMEM, AXnMOVDISPBX, CXnMOVAX, DISPSInMOVDS, MEM222014/06例:地址为例:地址为AREA1(段内偏移量)的单元内容,(段内偏移量)的单元内容,传送至同一段内的地址为传送至同一段内的地址为AREA2的单元中。的单元中。AREA1AREA265F302 0024E00500MOV AREA2, AREA1MOV A

14、L, AREA1MOV AREA2, AL注意事项:注意事项: 1. 立即数不能直接送段寄存器立即数不能直接送段寄存器 MOV DS, 3000H 2. 目地操作数不允许用立即数方式目地操作数不允许用立即数方式 MOV 2000H, AL 3. 不允许在两个存储单元间传送数据不允许在两个存储单元间传送数据 MOV 2000H,3000H 4. 不允许在两个段寄存器之间传送数据不允许在两个段寄存器之间传送数据 MOV DS, ES 5. MOV 指令不影响标志位。指令不影响标志位。232014/06NEXT: MOV AL, SI MOV DI, AL INC SI INC DI DEC CX

15、JNZ NEXT MOVSI, OFFSET BUFFER1 MOVDI, OFFSET BUFFER2 MOVCX, 200例例 :传送数据区:传送数据区BUFFER1中的中的200个字节到个字节到 内存中的内存中的BUFFER2数据区。数据区。242014/06PUSH和和POP指令的操作数可能有三种情况:指令的操作数可能有三种情况: 寄存器(包括通用寄存器,地址指针和变址寄存器)。寄存器(包括通用寄存器,地址指针和变址寄存器)。 段寄存器(段寄存器(CS例外,例外,PUSH CS指令是合法的,指令是合法的, 而而POP CS指令是非法的。指令是非法的。) 存储器存储器 但无论哪一种操作数

16、,其类型必须是字操作数(但无论哪一种操作数,其类型必须是字操作数(16位)。位)。 (2)堆栈操作指令)堆栈操作指令PUSH、POP 指令格式:指令格式:PUSH src;(SP)(SP)2, (SP)-1: (SP)(src)POP dest ; (dest)(SP) +1: (SP) , (SP)(SP)+2252014/06MOV AX, 1234HPUSH AX20006HSPSP20008H20007HSP例例:已知:已知(SS)2000H,(SP)0008H。20000H12H34HMOV AX, 5678HPOP AX20006HSPSP20008H20007HSP20000H1

17、2H34HAX7856 3412262014/06(3)交换指令)交换指令XCHG如:如:XCHG AL,BL;AL和和BL之间进行字节交换之间进行字节交换XCHG 2530H,CX ;CX中的内容和中的内容和2530H、 2531H两单元的内容交换两单元的内容交换格式:格式:XCHG OPRD1,OPRD2 执行的操作:执行的操作:( OPRD1) (OPRD2 )不允许使用段寄存器不允许使用段寄存器结果:结果:(BX)=1234H(2F246H)=6F30H例:例: XCHG BX, BP+SI若若(BX) = 6F30H,(BP) = 0200H (SI) = 0046H ,(SS) =

18、 2F00H (2F246H) = 1234H272014/06(4)换码指令()换码指令(也称查表指令也称查表指令)XLAT 使使累加器累加器AL中的一个值变换为存储器表格中的某一个值,中的一个值变换为存储器表格中的某一个值,一般用来实现编码码制的转换。一般用来实现编码码制的转换。表格首地址表格首地址BX+ALALBXAL11H20H33H22HBX+0BX+2BX+1+BX+ALAL用用BX指向表的首地址,指向表的首地址,AL中的内容为表中某一项与中的内容为表中某一项与首地址之间的位移量。首地址之间的位移量。在在执行查表指令时,将执行查表指令时,将BX与与AL中的内容相加,把得到中的内容相

19、加,把得到的值作为地址,然后将此的值作为地址,然后将此地址所对应单元中的值取地址所对应单元中的值取到到AL中去。中去。282014/06注:注: XLAT指令就是通过指令就是通过查表方式查表方式来完成换码功能的。来完成换码功能的。 在执行该指令之前,必须建立好一张表,该表的最在执行该指令之前,必须建立好一张表,该表的最大容量为大容量为256字节字节。如如:假设数据表存放在偏移地址为:假设数据表存放在偏移地址为2000H开始的开始的内存中,取出数据序号内存中,取出数据序号“3”所对应的表中某存所对应的表中某存储单元中的数送到储单元中的数送到AL中去,用如下几条指令即中去,用如下几条指令即可完成:

20、可完成:MOV BX,2000H ;BX隐含做表首地址隐含做表首地址MOV AL,3 ;结果送结果送ALXLAT292014/062. 目标地址传送指令目标地址传送指令功能功能:将存储器某单元的偏移地址送到一个寄存器。:将存储器某单元的偏移地址送到一个寄存器。 (1)取有效地址指令)取有效地址指令LEA功能功能:传送地址码的指令,可用来传送操作数传送地址码的指令,可用来传送操作数段地址段地址偏移地址偏移地址要求要求:源操作数必须为内存单元地址,目的操作数必须为一源操作数必须为内存单元地址,目的操作数必须为一个个16位的通用寄存器。位的通用寄存器。 如如:LEASI, 2728H LEABX,

21、BP+SI LEASP, 0482H用途用途:常用来使一个寄存器常用来使一个寄存器作为地址指针。作为地址指针。 指令格式:指令格式:LEAreg16, mem16 LEA BX, bufferMOV BX, OFFSET buffer 302014/06(2)将地址指针装到)将地址指针装到DS和另一个寄存器的指令和另一个寄存器的指令LDS功能功能:将某操作数的将某操作数的4个连续字节中的内容个连续字节中的内容(其中包括一(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其个段地址和一个偏移量)传送到两个目的寄存器,其中的中的后两个字节后两个字节(段地址)一定送到(段地址)一定送到DS中。

22、中。 如如:LDSDI, 2130H 指令格式:指令格式:LDSreg16, mem32 30H19H79H40H24H2133H2134H2131H2130H2132HDS段段执行后:执行后:DI: 7940H DS: 3024H312014/06(3)将地址指针装到)将地址指针装到ES和另一个寄存器的指令和另一个寄存器的指令LES功能:功能:将指定内存中的将指定内存中的4个字节个字节(32位位)分别装入指定的寄分别装入指定的寄存器和段寄存器存器和段寄存器ES中。中。例:例:DS:1000H DI : 0400H 10420H=FFH 10421H=00H 10422H=0ABH 10423

23、H=0CDH LES AX, 20DI; (AX)= 00FFH (ES)=0CDABH指令格式:指令格式:LESreg16, mem32 322014/063. 标志位传送指令标志位传送指令(1)读取标志指令)读取标志指令LAHF功能功能:将标志寄存器中的将标志寄存器中的低低8位传送到位传送到AH中。中。 FLAGOF DF IF TF SF ZFPFCFAFAHD7D6D4D2D0(2)写入)写入(置置)标志指令标志指令SAHF功能功能:将将AH寄存器的相应位传送到标志寄存器的低寄存器的相应位传送到标志寄存器的低8位。位。 只提供只提供8位标志位指令位标志位指令,保保持对持对8位机指令的兼

24、容性。位机指令的兼容性。332014/06功能:功能:PUSHF指令:将指令:将FR的值压入堆栈顶部,同时,栈指针的值压入堆栈顶部,同时,栈指针SP的的值减值减2,此指令在执行时,此指令在执行时FR的值不变。的值不变。 (3)对标志寄存器的压入堆栈指令和弹出堆栈指令)对标志寄存器的压入堆栈指令和弹出堆栈指令PUSHF、POPFPOPF 指指令:从堆栈中弹出一个字送到令:从堆栈中弹出一个字送到FR中,同时,堆栈指中,同时,堆栈指针针SP的值加的值加2。 用途:用途:用在子程序和中断处理程序的首尾,起用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。保存主程序标志和恢复主程序

25、标志的作用。 342014/064. 输入输入/输出数据传送指令输出数据传送指令IN、OUTCPU输入输入输出输出INOUTAX或或AL 累加器专用指令累加器专用指令,可以直接寻址或寄存器寻址。注意直可以直接寻址或寄存器寻址。注意直接寻址时地址表示方式和其他指令的区别。接寻址时地址表示方式和其他指令的区别。IN AL, 40H OUT 40H , AL IN AX, 40H OUT 40H , AX8位位16位位(40H) AL(41H) AHAL (40H) AH (41H)352014/06如:如:INAL,50HIN AX,70HMOV DX,2500 H IN AL,DX IN AX,

26、DX OUT 44H,ALOUT 80H,AXMOV DX,3000 HOUT DX,ALOUT DX,,AX注:注:端口地址大于端口地址大于255,必须用必须用DX寄存器做间接寄存器做间接寻址。寻址。 16位端口地址设置在位端口地址设置在偶数地址偶数地址号上。号上。 362014/061.加法指令加法指令如如: ADD AL, 50HADD CX, 1000HADD DI , SI ADD AX, BX+2000H(1)加法指令)加法指令ADD功能功能: dest+srcdest ,结果影响标志位,结果影响标志位影响标志位影响标志位:CF、PF、AF、ZF、SF、OF二、二、算术运算指令算术

27、运算指令指令格式:指令格式:ADD dest, src 372014/06如如:ADCAX,SIADC DX,SIADCBX,3000HADCAL,5(2)带进位位的加法指令)带进位位的加法指令ADC影响标志位影响标志位:CF、PF、AF、ZF、SF、OF用途用途:用在多字节加法运算中:用在多字节加法运算中指令格式:指令格式:ADC dest, src 功能功能: dest+src+CFdest ,结果影响标志位,结果影响标志位382014/06例例:两个:两个4字节无符号数相加,这两个数分别放在:字节无符号数相加,这两个数分别放在:2000H和和3000H开始的存储单元内开始的存储单元内,要

28、求运算后得到的结果,放在要求运算后得到的结果,放在2000H开始的单元内。开始的单元内。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003H程序:程序: CLC MOV SI, 2000H MOV AX, SI ADD AX, 3000H MOV SI, AXSIMOV AX, SI+2ADC AX, 3002HMOV SI+2, AXSI+2392014/06如如:INC ALINC CXINC BYTE PTRBX+50H (3)增量指令)增量指令INC功能功能:dest+1 dest用途用途:用在循环程序中修改指

29、针:用在循环程序中修改指针/ /地址和循环次数。地址和循环次数。指令格式:指令格式:INC dest 标志位:标志位:不影响不影响CF, 影响影响AF, OF, PF, SF和和ZF402014/062. 减法指令减法指令(1)不带借位位的减法指令)不带借位位的减法指令SUB影响标志位影响标志位:CF、PF、AF、ZF、SF、OF如如:SUB BX , CXSUB BP, CLSUB AL , 20SUB SI , 5010HSUB WORD PTRDI, 1000H指令格式:指令格式:SUB dest, src 功能:功能:dest srcdest ,结果影响标志位。,结果影响标志位。412

30、014/06如如:SBB AL, 20H (2)带借位位的减法指令)带借位位的减法指令SBB影响标志位影响标志位:CF、PF、AF、ZF、SF、OF用途用途:用在多字节减法运算中。:用在多字节减法运算中。指令格式:指令格式:SBB dest, src 功能:功能:dest src CFdest ,结果影响标志位。,结果影响标志位。CLCMOV AX, 5049HSBB AX, 0E2D7H结果:结果:CF=1, OF=0, ZF=0, SF=0, PF=1, AF=0 5 0 4 9 E 2 D7 6 D 7 20 422014/06如如:DEC ALDEC BXDEC BYTE PTRDI+

31、2 功能功能:dest - 1 dest指令格式:指令格式:DEC dest 标志位:标志位:不影响不影响CF, 影响影响AF, OF, PF, SF和和ZF(3)减量指令)减量指令DEC432014/06如如:NEGALNEGCX(4)取补指令)取补指令NEG功能功能:0 - destdest,取其相反数,即取反加取其相反数,即取反加1。指令格式:指令格式:NEG dest影响标志位影响标志位: AF,CF,OF,PF,SF和和ZF, 只有当操作数为只有当操作数为0时时, CF=0, 否则否则CF=1。注:若操作数为注:若操作数为80H或或8000H,执行求补指令后,执行求补指令后,结果没有

32、变化,但结果没有变化,但OF=1。442014/06如如:CMPAX,2000HCMPAL,50HCMP DX,DI (5)比较指令)比较指令CMP功能功能:执行两个数的相减操作,:执行两个数的相减操作,但不送回相减的结果但不送回相减的结果。影响标志位影响标志位:CF、PF、AF、ZF、SF、OF用途用途:CMP指令指令后面后面经常会有一条经常会有一条条件转移指令条件转移指令,用来检查标志位的状态是否满足了某种关系。用来检查标志位的状态是否满足了某种关系。 注:注: CMP指令只影指令只影响标志位,并且响标志位,并且原操作数不变。原操作数不变。 指令格式:指令格式:CMP dest, src4

33、52014/06例:例:比较两个无符号数比较两个无符号数X和和Y的大小,并将大数的大小,并将大数存入存入AL中。中。 XY65F302 0024E0结果结果结果结果AL=F3 MOV AL, X MOV BL, Y CMP AL,BL ;AL-BL JNC NEXT ;65-F3 MOV AL,BLNEXT: HLT 462014/06例:例:CMP AX, BX若结果若结果ZF=1, 可以判断可以判断AX与与BX相等;相等;若若AX与与BX均为无符号数:均为无符号数: CF=0 ,AXBX; CF=1,AXBX; OF与与SF异号,异号,AXBX。指令系统针对有符号数和无符号数的比较指令系统

34、针对有符号数和无符号数的比较分别提供了不同的判断指令分别提供了不同的判断指令。JA 大于则转大于则转JB 小于则转小于则转JG 高于则转高于则转JL 低于则转低于则转472014/06例:例:比较两个有符号数比较两个有符号数X和和Y的大小,并将大数的大小,并将大数存入存入AL中。中。 XY65F302 0024E0结果结果结果结果AL=65H MOV AL, X MOV BL, Y CMP AL,BL ;AL-BL JG NEXT ;65-F3 MOV AL,BLNEXT: HLT482014/06u BCD码运算指令码运算指令 BCD码:用二进制形式表示的十进制码。码:用二进制形式表示的十进

35、制码。每每1位十位十进制数用进制数用4位二进制位二进制表示,运算规则是表示,运算规则是逢十进一逢十进一。1、加法的、加法的BCD码调整指令码调整指令(1)压缩)压缩BCD码调整指令码调整指令DAA功能功能:把:把AL中的和调整到中的和调整到压缩压缩BCD码格式码格式 AL 影响标志位影响标志位:CF、PF、AF、ZF、SF492014/06例:例:MOV AL, 56HADD AL, 47HDAA; (AL)= 9DH; (AL)= 03H,CF=1调整原则:调整原则:1. 如果如果AF=1或或AL的的低低4位大于位大于9, 则则AL加加06H并置并置AF=12. 如果如果CF=1或或AL的的

36、高高4位大于位大于9, 则则AL加加60H并置并置CF=1。3. 如果满足上述如果满足上述2条条, 则则AL加加66H, 并置并置AF=1,CF=1。注:注: DAA通常跟在通常跟在ADD和和ADC指令之指令之后使用。后使用。 只能对只能对AL中的中的运算结果进行运算结果进行BCD码调整码调整 。502014/06MOV AX, 1234HMOV BX, 5678HADD AL, BLDAAMOV CL, ALMOV AL, AHADC AL, BHDAAMOV AH, ALMOV AL, CL; (AL)= ACH; (AL)= 12H CF=1; (CL) = 12H; (AL) = 12

37、H; (AL) = 69H; (AL) = 69H CF=0; (AX) = 6912H CF=0512014/06(2)非压缩)非压缩BCD码调整指令码调整指令AAA功能功能:把:把AL中的和调整到中的和调整到非压缩非压缩BCD码格式码格式 AL AH + 调整产生的进位值调整产生的进位值 AH影响标志位影响标志位:CF=1,AF调整原则调整原则:若若AL的低的低4位是在位是在09之间,且之间,且AF0,则无需调整,则无需调整若若AL的的低低4位是位是0AH0FH之间之间,或或AF=1,则则AL加加6调整,调整,AH1 AH,且使且使CF=1。AL的高的高4位清零。位清零。用途用途:适用于数

38、字:适用于数字ASC码的调整;也适用于一般的非压缩码的调整;也适用于一般的非压缩BCD码的十进制调整码的十进制调整 522014/067+5=12 用组合的用组合的BCD码表示运算过程:码表示运算过程:0000 01110000 0101 0000 1100BCD码逢十进一,码逢十进一,16进制逢进制逢16进进1,因为低,因为低4位大位大于于9,所以在个位上加,所以在个位上加6,使其产生进位,同时,使其产生进位,同时AF=1,CF=1。0000 11000000 0110 0001 001016进制加法进制加法AAA指令调整为指令调整为10进制结果进制结果532014/06 BCD码减法调整指

39、令与加法调整指令类似,只是码减法调整指令与加法调整指令类似,只是分别将加分别将加06H, 60H, 66H改为改为减减 06H, 60H, 66H。AAS: 对非组合的对非组合的BCD码减法调整码减法调整DAS: 对组合的对组合的BCD码减法调整码减法调整注意:必须紧跟在相对应的加减法指令后进行调整。注意:必须紧跟在相对应的加减法指令后进行调整。2、减法的、减法的BCD码调整指令码调整指令542014/063、乘法指令、乘法指令MUL、IMUL MUL是是无符号乘法指令无符号乘法指令,IMUL是是有符号乘法指令有符号乘法指令 功能功能:完成完成8/16位二进制数的相乘位二进制数的相乘 影响标志

40、位影响标志位:CF、OF8位乘法位乘法AL操作数操作数) AH AL16位乘法位乘法AX操作数操作数) DX AX552014/06指令中不出现指令中不出现 AL 或或 AX。例:例:MUL BL; ALBL AXMUL CX; AXCX DX(高高8位位) , AX(低低8位位)MUL BYTE PTR DI; ALDI AXMUL WORD PTR SI; AXSI+1SI DX(高高8位位) , AX(低低8位位)562014/06例例: :MOV AL, 0FBHMOV BH, 02HIMUL BH结果:结果:AX=0FFF6H, 即即-10, CF=0, OF=0MOV AL, 0F

41、BHMOV BH, 02HMUL BH结果:结果:AX=01F6H, 即即502, CF=1, OF=1572014/064、除法指令、除法指令DIV、IDIV DIV是无符号除法指令,是无符号除法指令,IDIV是有符号除法指令。是有符号除法指令。 功能功能:完成完成8/16位二进制数的除法位二进制数的除法 影响标志位影响标志位:无无ALAHAH AL操作数操作数商商余数余数8位除法位除法AXDXDX AX操作数操作数商商余数余数16位除法位除法582014/06DIV BL; (AX)(BL) (AL)商商 , (AH)余数余数DIV CX; (DX AX)(CX)(AX)商商, (DX)余

42、数余数DIV BYTE PTR DI; (AX)DI (AL)商商 (AH)余数余数IDIV WORD PTR SI; (DX AX)SI+1SI (AX)商商 , (DX)余数余数例例:IDIV BX; (DX AX)(BX) (AX)商商 , (DX)余数余数已知:已知:(AX)=0123H (BL)=12HDIV BL;结果:结果:(AL)=10H,(AH)=03H592014/06注意注意:1) 除法运算后,所有的标志位都是不确定的,没有除法运算后,所有的标志位都是不确定的,没有意义;意义;2) 用用IDIV指令指令时,如果是双字除以一个字,则商时,如果是双字除以一个字,则商的范围为的

43、范围为-3276832767,如果是一个字除以一,如果是一个字除以一个字节,则商的范围为个字节,则商的范围为-128127。如果超出这。如果超出这个范围,会作为个范围,会作为除数为除数为0来处理,产生来处理,产生0号中断号中断;3) 8086系统规定系统规定余数的符号和被除数相同余数的符号和被除数相同;4) 当当8位数除以位数除以8位数,位数,16位数除以位数除以16位数时,位数时,必须必须对被除数进行扩展。对被除数进行扩展。602014/06功能功能:CBW指令将一个字节(指令将一个字节(8位)转换成为字位)转换成为字(16位)。该指令后面不带操作数,但隐含寄存位)。该指令后面不带操作数,但

44、隐含寄存器操作数器操作数AL和和AH。 (1)CBW (字节(字节字字)规则规则:如果如果 (AL)80H,则,则(AH)0,否则否则 (AH)FFH CBW指令对标志位没有影响。指令对标志位没有影响。 5、转换、转换(扩展扩展)指令指令 无符号数被除数扩展:无符号数被除数扩展:将将AH或或DX清清0。 有符号数被除数扩展:有符号数被除数扩展:对对AH或或DX进行符号扩展。进行符号扩展。612014/06例如例如:MOVAL, 4FH ; CBW ;(AL)=0100 1111B(AH)=0000 0000B MOVAL, 0FBH ; CBW;(AL)=1111 1011B(AH)=1111

45、 1111B622014/06功能功能:CWD指令将一个字(指令将一个字(16位)转换成为双字位)转换成为双字(32位)。该指令后面也不带操作数,隐含寄位)。该指令后面也不带操作数,隐含寄存器操作数存器操作数AX和和DX (2)CWD(字(字双字双字) 规则规则:如果如果 (AX)8000H,则,则(DX)0,否则否则 (DX)FFFFH CWD指令对标志位没有影响。指令对标志位没有影响。632014/06三、逻辑运算和移位指令三、逻辑运算和移位指令642014/061、逻辑运算指令、逻辑运算指令ANDORXORNOTTEST双操作数双操作数单操作数单操作数功能功能:对:对8位数操作或位数操作

46、或16位数操作。位数操作。(1)AND、OR、XOR652014/06例例:已知:已知(AX)=1234HANDAL,0FHANDAX,0FF00HANDAX,BXANDDX,BX+SI注:注:AND指令常用来对一个指令常用来对一个数据的指定位数据的指定位清清0。OR指令常用来对一些指令常用来对一些指定位指定位置置1。XOR指令常用来对清指令常用来对清0,取反取反。ORAL,0FHORAX,0FF0HXORAL,0FHXORAX,AXXORCX,1000H662014/06(2)TEST功能功能:同同AND,但不送回操作结果,仅影响标志位。,但不送回操作结果,仅影响标志位。 如如:TESTAX

47、,8000HTESTAL,01用途用途:一般用来一般用来检测指定位是检测指定位是1还是还是0,这个指定,这个指定位往往对应一个物理量,如状态寄存器最低位。位往往对应一个物理量,如状态寄存器最低位。ZF影响标志位影响标志位:CF=0、OF=0、 PF、ZF、SF672014/06(3)NOT功能功能:求出指令所给的操作数的反码,再送回。:求出指令所给的操作数的反码,再送回。 影响标志位影响标志位:无无如如:NOTALNOTBXNOT WORD PTR1000不能对立即数进行取反操作682014/062、移位指令、移位指令非循环移位指令非循环移位指令循环移位指令循环移位指令SALSHLSARSHR

48、ROLRORRCLRCR影响标志位影响标志位:CF、PF、ZF、SF 、OF692014/06(1)非循环移位指令非循环移位指令SAL、SHL、SAR、SHR u SHL,逻辑左移逻辑左移/ SAL,算数左移:算数左移:0CF例:已知例:已知(AX)=0402HSHLAX,1MOV CL,4SAL AX,CL SHL AL,CL注:注:如果只移如果只移1位,那么,位,那么,指令中直接用指令中直接用1。 如果左移或右移若干位,如果左移或右移若干位,那么必须用那么必须用CL寄存器预寄存器预先指定所移的位数先指定所移的位数 。702014/06u SHR,逻辑右移:逻辑右移:CF0MOV AL, 8

49、SHR AL, 1; AL=0000 1000B; AL=0000 0100B=4u SAR,算术右移算术右移:CFMOV AL, -4SAR AL, 1;AL=1111 1100B;AL=1111 1110B =-2712014/06(2)循环移位指令循环移位指令ROL、ROR、RCL、RCR 722014/06例:例:已知已知 CF =1,(AX) = 8450H MOV CL , 2 ; RCL AL , CL ; (AL)=01000010B, CF=1CF=1,(AL)=50H MOV CL , 9 ; ROL AL , CL ; ROL AX,1 ;ROR AL,1 ;(AL)=0

50、010 1000B, CF=0(AX)= 08A1H, CF=1MOV CL, 4 ;ROL AL,CL;(AL)=0000 0101B, CF=1732014/06功能功能:用一条指令实现对一串字符或数据的操作。:用一条指令实现对一串字符或数据的操作。 四、串操作指令四、串操作指令742014/06 指令实现对一串指令实现对一串数据或字符或字数据或字符或字的操作,数据串的的操作,数据串的个数在个数在CX中中,每执行一次每执行一次CX自动减自动减1,直至减到零,直至减到零串操作自动停止;串操作自动停止; 源操作数在源操作数在DS:SI中中,目的操作数在目的操作数在ES:DI中中; 源操作数和目

51、的操作数都在内存中,源操作数和目的操作数都在内存中,是唯一一条从是唯一一条从内存到内存的指令;内存到内存的指令; DF=1,地址自动减量,地址自动减量运算,由高至低;运算,由高至低; DF=0,地址自动增量地址自动增量运算,由低至高。运算,由低至高。特点:特点:752014/061、字符串传送指令、字符串传送指令MOVS执行的操作:执行的操作:DI SI (SI) (SI) 1 (DI)(DI) 1执行的操作:执行的操作:DI SI (SI) (SI) 2 (DI)(DI) 2作用:作用:将将 SI 指向的数据段指向的数据段中的一个字(字节)传送中的一个字(字节)传送到到 DI 指向的附加段指

52、向的附加段,并,并自动修改自动修改 SI、DI 的内容,的内容,使其指向下一个单元。使其指向下一个单元。 762014/06例例:将源字符串中的:将源字符串中的100个字节数据传送到目标字符个字节数据传送到目标字符串单元中去,设源字符串的偏移地址为串单元中去,设源字符串的偏移地址为2500H,目,目标串的偏移地址为标串的偏移地址为2300H。程序程序:CLD ;MOVCX,100 ;MOVSI,2500H ;MOV DI,2300H ; REPMOVSB ; HLT ; 自动增址自动增址串的长度串的长度源串首元素的偏移地址源串首元素的偏移地址目标串首元素的偏移地址目标串首元素的偏移地址重复传送

53、操作,直到重复传送操作,直到(CX)=0为止为止传送结束传送结束772014/06注注:传送方向:传送方向 ,(,(a)DF=0或或1; (b)DF=1; (c)DF=0782014/062、字符串的存和取指令、字符串的存和取指令STOS、LODS例例:使:使0404H开始的开始的256个单元清零。个单元清零。程序程序:CLD LEA DI, 0404H MOV CX, 0080H XOR AX, AX REP STOSW HLTSTOS指令功能:指令功能:是把累加器是把累加器AL/AX中的内容存到内中的内容存到内存中去存中去,使用重复前缀。,使用重复前缀。792014/06LODS指令功能指

54、令功能:把内存中的值:把内存中的值取到累加器取到累加器AL/AX中。中。 注注:LODS指令前加重复前缀是没有意义的。指令前加重复前缀是没有意义的。 例:例:在数据段在数据段DS:1000H中有一字符串,试将其每一个字中有一字符串,试将其每一个字符加符加 1 后,送入附加段后,送入附加段ES:2000H中。中。LEA SI, 1000HLEA DI, 2000HMOV CX, 30CLDAGAIN: LODSB ADD AL, 1 MOV ES:DI,AL INC DI DEC CX JNZ AGAIN HLT SI ALSI+1 SI802014/06例例3-7:检验两段字符串是否相同。源字

55、符串首地址为检验两段字符串是否相同。源字符串首地址为2400H,目的字符串首地址为目的字符串首地址为1200H,字符串长度为,字符串长度为100,若两段字符,若两段字符串完全相同,则串完全相同,则BX寄存器为寄存器为0;若不相同,将出现第;若不相同,将出现第1个不个不相同的字符送入相同的字符送入AX中,其偏移地址送入中,其偏移地址送入BX中。中。 (1)CMPS指令指令功能功能:将源串的一个元素减去目标串中相对应的一个元素,:将源串的一个元素减去目标串中相对应的一个元素,不回送结果,只根据结果的特征置标志位,并修改不回送结果,只根据结果的特征置标志位,并修改SI和和DI内容指向下一元素内容指向

56、下一元素 。用途用途:前加重复前缀:前加重复前缀REPE/REPZ(相等,则重复),(相等,则重复),用用来寻找两个串中的第一个不相同数据来寻找两个串中的第一个不相同数据 3、字符串的扫描和比较指令、字符串的扫描和比较指令CMPS、SCAS812014/06CLDMOV CX,100MOV SI,2400HMOV DI,1200H REPE CMPSBANDCX,0FFFFHJZEQQ DECSI MOV BX,SIMOV AL,SIJMPSTOPEQQ:MOV BX,0STOP:HLT程序程序:;串比较,直到;串比较,直到ZF0或或CX0;判;判CX=0否?否?;若;若CX=0,说明两串相等

57、,说明两串相等;第一个不相同字节偏移地址;第一个不相同字节偏移地址BX;第一个不相同字节内容;第一个不相同字节内容AL;两串完全相同,;两串完全相同,BX0822014/06例例3-8:设一字符串,其首元素的偏移地址为设一字符串,其首元素的偏移地址为0010H,长度为长度为100个字节,查找其中否存在个字节,查找其中否存在“$”字符。若存字符。若存在,则将在,则将“$”字符所在地址送入字符所在地址送入BX寄存器中,否则寄存器中,否则将将BX寄存器清寄存器清“0”。 功能功能:从目标串中查找某个关键字,要求查找的关键字应:从目标串中查找某个关键字,要求查找的关键字应事先置入事先置入AX或或AL寄

58、存器中。寄存器中。 操作操作:(:(AX/AL)-(DI)不传送结果,只根据结果置标志位,)不传送结果,只根据结果置标志位,配合使用配合使用REPNE/REPNZ ,直至,直至ZF=1或(或(CX)0止。止。(2)SCAS指令指令832014/06程序程序:CLD ;清;清0方向标志方向标志DF MOVCX,100;设串长度;设串长度100个字节个字节MOVDI,0010H ;送目标串首元素偏移地址;送目标串首元素偏移地址MOVAL,$ ;关键字送入;关键字送入ALREPNE SCASB ;找关键字,;找关键字,DI+1DI,直到直到ZF=1或或CX=0ANDCX,0FFFFH ;判;判CX=

59、0否?否?JZZER ;若;若CX=0,转,转DECDI ;回退地址到关键字处;回退地址到关键字处MOVBX,DI ;关键字所在地址送入;关键字所在地址送入BXJMPST0ZER: MOVBX,0 ;未找到,将;未找到,将0送入送入BXST0: HLT842014/064、重复前缀、重复前缀REP功能:无条件重复功能:无条件重复CX寄存器中指定的次数。如果不使寄存器中指定的次数。如果不使用重复前缀,各种字符串指令则只执行一次。用重复前缀,各种字符串指令则只执行一次。 REPREPE/REPZREPNE/REPNZREPE/REPZ功能:如果在功能:如果在CMPS和和SCAS指令前使用指令前使用

60、REPE/REPZ前缀,一般用来在字符串中查找一个与关前缀,一般用来在字符串中查找一个与关键字不相等的数据,但需要键字不相等的数据,但需要同时满足同时满足两个条件:两个条件: CX0 且且ZF=1852014/06REPNE/REPNZ功能:如果在功能:如果在CMPS和和SCAS指令前使用指令前使用REPNE/REPNZ前缀,一般用来在字符串中查找一个前缀,一般用来在字符串中查找一个与关键字相等的数据,但需要与关键字相等的数据,但需要同时满足同时满足两个条件:两个条件: CX0 且且ZF=0862014/06无条件转移指令无条件转移指令 条件转移指令条件转移指令循环控制指令循环控制指令 中断指

温馨提示

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

评论

0/150

提交评论