第二章8086微处理器的指令_第1页
第二章8086微处理器的指令_第2页
第二章8086微处理器的指令_第3页
第二章8086微处理器的指令_第4页
第二章8086微处理器的指令_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 微型计算机指令系统2.1、指令、指令2.2、寻址方式、寻址方式2.3、指令系统、指令系统2.1、指令、指令l概念1、指令:存放在内存中让CPU完成所需要的操作和处理。2、机器码:能被CPU识别并执行的唯一语言(二进制格式)。3、指令助记符与汇编程序指令格式指令格式l机器指令:指挥计算机完成某种操作的命令。l从计算机组成的层次结构来说,计算机指令有机器指令、伪指令和宏指令之分。 l指令格式如下: 操作符操作符 OPD, OPS OPD:目的操作数目的操作数 OPS:源操作数源操作数2.2、寻址方式、寻址方式l 考核知识点:考核知识点:1、立即数寻址、立即数寻址2、寄存器操作数寻址、寄存器

2、操作数寻址3、存储器操作数寻址:、存储器操作数寻址:(1)直接寻址(2)寄存器间接寻址(3)变址寻址(4)基址寻址 (5)基址-变址寻址 1、立即数寻址、立即数寻址l立即寻址方式中,指令操作码和操作数都在存储器代码段中,源操作数通常是一个常数。源操作数通常是一个常数。l功能:操作数存放在存 储器,指令下一单元的 内容为立即操作数n。l图形表示如右:l【例2.1】MOV AX, 10l执行后(AX)=?l该例中源操作数为立即寻址方式,立即数 为10,存放在指令的下一单元。l图形表示:l执行:10AXl执行后:(AX)=000AH 注意:注意:l目标操作数通常是寄存器;l源操作数的位数必须位数必须

3、与目标操作数寄存器匹配匹配;l段寄存器段寄存器不能作为目标操作数。l例如:MOV AL, 1234H MOV AX, 10 MOV DS, 1234H2. 寄存器寻址寄存器寻址l寄存器寻址方式的操作数在指令指明的寄存器中。源操作数和目标操作数都是寄存器。源操作数和目标操作数都是寄存器。l功能:操作数直接存放在寄存器R中。l注意:两寄存器位数匹配。注意:两寄存器位数匹配。l例: MOV AX,BXMOV AX,BX MOV DS,AX MOV DS,AX MOV AL,DX ; MOV AL,DX ;非法操作非法操作l【例2.2】l下列程序执行后,(AX)=?,(BX)=? MOV AX,123

4、4H MOV BX,5678H ADD AX,BXl 该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。l图形表示:l执行:1234HAX 5678HBX (AX)+(BX)AXl执行后:(AX)=68ACH,(BX)=5678H3、存储器操作数寻址、存储器操作数寻址l如果操作码所需操作数存放在内存储器中,则指令中需要给出操作数的地址信息。为了提高程序的灵活性,8086指令系统提供了多种存储器寻址方

5、式。(1)直接寻址)直接寻址 (2)寄存器间接寻址)寄存器间接寻址 (3)变址寻址)变址寻址 (4)基址寻址)基址寻址 (5)基址)基址-变址寻址(变址寻址(6)关于段跨跃前缀)关于段跨跃前缀(1) 直接寻址直接寻址l存储器操作数(存储器操作数(memmem)概念)概念l格式:源操作数或目的操作数其中之一直接给出了其中之一直接给出了memmem的有效地址的有效地址(EA)。 EAEA需要加上方括号需要加上方括号 MOV 1234H, 2345H ; ;非法操作非法操作 MOV AL, 45H ; ;立即数寻址立即数寻址l功能:指令下一个单元的内容是操作数的偏移地址EA。图形表示:图形表示:l段

6、寄存器(“偏移基准”):在直接寻址过程中在直接寻址过程中,8086CPU指令中给出的指令中给出的EA与与DS组合在一起构组合在一起构成逻辑地址成逻辑地址DS:EA。但是也允许段超越。但是也允许段超越。 例:MOV 1234H, AX MOV ES:1234H, AX MOV AX, SS:3100Hl【例2.3】寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。l执行指令:MOV AX ,BUFl执行后:(AX)=?l图形表示:l执行:(32000H)AXl执行后:(AX)=4545H(2) 寄存器

7、间接寻址寄存器间接寻址l寄存器间接寻址方式中,操作数都是寄存器,且其操作数都是寄存器,且其中之一是包含中之一是包含EAEA的寄存器。的寄存器。如:MOV AX,SI MOV BP,BXl功能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。注意:1)允许存放允许存放EAEA的寄存器只有四个:的寄存器只有四个:SISI、DIDI、BXBX、BPBP;2)存放EA的寄存器要用“”3)段寄存器(“偏移基准”) SI-DSSI-DS、DI-DSDI-DS、BX-DSBX-DS、BPSS,BPSS,允许段超越。允许段超越。如:MOV AX,ES:SI MOV DS:BP,BX寄存器间接寻址示意图:

8、寄存器间接寻址示意图:l例如:MOV AX,BXl若(DS)2000H,(BX)1000H,物理地址20000H1000H21000H。指令执行前,(AX)2030H,(21000H)0A0H,(21001H)50H,指令执行后,(AX)50A0H,(21000H)0A0H,(21001H)50H。指令执行情况如下:l AX AH AL 数据段 物理地址 A0H 21000H 50H 20001H 56H 20002H 【例【例2.42.4】寄存器和存储器内容分别为:寄存器和存储器内容分别为: (AXAX)=0=0,(,(BPBP)=0030H=0030H, (SSSS)=2000H=2000

9、H,(,(20030H20030H)=1234H=1234Hl执行指令:MOV AX ,BP l执行后:(AX)=?(BP)=? (SS)=?(20030H)=?l图形表示如下:(3) 变址寻址l直接寻址和寄存器间接寻址的组合。直接寻址和寄存器间接寻址的组合。MOV AX,SI 1234HMOV AX,SI 1234HMOV AX,SI 1234HMOV AX,SI 1234HMOV AX,SI+1234HMOV AX,SI+1234HMOV AX,1234H SIMOV AX,1234H SIl能使用的寄存器能使用的寄存器:SISI-DS,DIDI-DSl功能:功能:操作数存放在存储器,寄存

10、器R的内容加位移量X为操作数的偏移地址EA。(4) 基址寻址l直接寻址和寄存器间接寻址的组合。直接寻址和寄存器间接寻址的组合。 MOV AX,BX 1234H MOV AX,BX 1234H MOV AX,BP 1234H MOV AX,BP 1234Hl能使用的寄存器能使用的寄存器:BXBX-DS,BPBP-SSl功能:功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。l【例2.5】l设执行前:设执行前: (AXAX)=0040H=0040H,(,(BXBX)=0030H=0030H, (DSDS)=2000H=2000H,(,(20036H20036H)=0050H

11、 =0050H l执行指令:执行指令:ADD 6BXADD 6BX,AXAXl执行后:(AX)=?,(BX)=?,(DS)=?, (20036H)=?l图形表示如下: (5) 基址变址寻址基址变址寻址l 基址变址寻址方式是基址寻址方式和变址寻基址变址寻址方式是基址寻址方式和变址寻址方式的结合(址方式的结合(BX,BPBX,BP;SI,DISI,DI)。)。如果基址寄存器为BX,则段寄存器使用DS;如果基址寄存器用BP,则段寄存器用SS。lMOV AX,BXSI1234H ;EA=BX+SI+1234HMOV AX,BXSI1234H ;EA=BX+SI+1234HlMOV AX,BXBP123

12、4H ;MOV AX,BXBP1234H ;非法操作非法操作l功能:功能:操作数存放在存储器,BR的内容加IR的内容加位移量X是操作数的偏移地址EA。【例【例2.62.6】l例如 MOV AL,BXSI (MOV AL,BXSI)l若指令执行前,(DS)1000H, (BX)0010H,(SI)0002H, (10012H)45Hl则EA(BX)(SI)0012H, PA(DS)10HEA10012Hl指令执行后(AL)45H。(5) 跨段问题跨段问题l按前述规定按前述规定:若选用BP作间址基址寄存器、变址寄存器或基址寄存器,则操作数在堆栈段,操作数的物理地址PA由堆栈段寄存器SS的内容左移4

13、位与偏移地址EA相加后形成;否则,操作数在数据段,操作数的物理地址PA由数据段寄存器DS的内容左移4位与偏移EA相加后形成。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器作数时,必须用跨段前缀指明操作数的段寄存器名。名。l 汇编格式:汇编格式:段寄存器名:操作数地址。l 功能:功能:段寄存器名指明操作数属哪个段。 【例【例2.72.7】跨段前缀示例。跨段前缀示例。lMOVAX,DS:BP lMOVCX,SS:SI l该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4

14、位加偏移EA形成。上述2条指令的源操作数物理地址分别为:lPA1 =(DS)左移4位+BPlPA2 =(SS)左移4位+SI返回本章首页返回本章首页l分别指出下列各指令寻址方式。l(1)MOV AX,1000Hl(2)MOV AX,1000Hl(3)MOV AX,BXl(4)MOV AX,BX+0100Hl(5)MOV AX,BX+SI+0010Hl(6)MOV AX, BXl(7)MOV AX,SI+0100H 历年典型考题历年典型考题 2012年考题第年考题第7题题 2011年考题第年考题第7题题 历年典型考题历年典型考题 2009年考题第年考题第4题题2.3 80862.3 8086指令

15、系统指令系统 l 包括数据传送指令、算术运算指令、逻辑数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、跳转指令、处理运算和移位指令、串操作指令、跳转指令、处理器控制指令器控制指令。后几节将分别介绍这些指令的语句格式和功能。2.3.1 数据传送指令数据传送指令 2.3.2 算术运算指令算术运算指令 2.3.3 逻辑运算与移位指令逻辑运算与移位指令 2.3.4 串操作指令串操作指令 2.3.5 跳转指令跳转指令 2.3.6 处理器控制指令处理器控制指令返回本章首页返回本章首页2.3.1 数据传送指令数据传送指令l1 数据传送指令数据传送指令l2 输入输出指令输入输出指令l3 目标地址传

16、送指令目标地址传送指令l4 标志传送指令标志传送指令返回本节返回本节1 1 通用数据传送指令通用数据传送指令l(1)传送指令传送指令MOVl(2)堆栈指令堆栈指令PUSHPOPl(3)数据交换指令数据交换指令XCHGl(4)查表指令)查表指令XLATl(1 1)传送指令)传送指令MOVMOVl语句格式:MOV OPD,OPSl功能:将源操作数传送入目的地址,源地址内容不变。 即(OPS)OPD。l下图4.1描述了MOV指令在传送数据时允许传送的路径及类型。图图2.1 MOV指令所允许的数据传送路径及类型指令所允许的数据传送路径及类型l注意:注意:1)不允许两个操作数都是)不允许两个操作数都是段

17、寄存器;段寄存器;2)不允许立即数直接传送)不允许立即数直接传送给段寄存器给段寄存器3)不允许两个操作数都是)不允许两个操作数都是存储器操作数存储器操作数MOV指令的形式有如下几种:指令的形式有如下几种: l1)从通用寄存器到通用寄存器 MOV reg1,reg2l2)立即数传送到通用寄存器 MOV reg ,data l3)通用寄存器和存储单元之间 MOV mem (reg),reg (mem)l4)立即数传送到存储单元 MOV mem, datal5)段寄存器与通用寄存器间的数据传送 MOV seg,reg 或 MOV reg, seg l6)段寄存器与存储单元间的数据传送 MOV seg

18、,mem 或 MOV mem, seg 【例【例2.82.8】存储器与寄存器间存储器与寄存器间 数据传送数据传送lMOV AX,BUF ;BUF是变量,源操作数为直接寻址lMOV BH,DI ;源操作数为寄存器间接寻址lMOV DI,ES:3SI ;源操作数为变址寻址,使用跨段前缀lMOV BP,3BX+SI ;源操作数为基址加变址寻址lMOV BUFA,DL ;BUFA是一字节变量lMOV BP,AX ;使用SS段寄存器lMOV DS:BP,DL ;使用跨段前缀lMOV BUF,DS ;BUF是个字变量lMOV ES ,BUF(2 2) 堆栈操作指令堆栈操作指令l1)进栈指令PUSHl2)出

19、栈指令POP1 1)进栈指令)进栈指令PUSHPUSHl语句格式: PUSH OPSl功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。l即:(SP)-SP (OPS)158SP (SP)-SP (OPS)70SP2 2)出栈指令)出栈指令POPPOPl语句格式: POP OPDl功能: 将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。l从POP指令功能可看出,该指令为PUSH指令的逆过程。l即:(SP)(OPD)70 (SP)+SP (SP)(OPD)158 (SP)+SPl例:l若寄存器AX,BX的内容分别为1110H,5678H时,依次执行P

20、USH AX,PUSHBX,POP AX,POP BX后,则寄存器AX和BX的内容分别为 ( ) A. 1110H,7856H B.5678H,1234H C. 5678H,1110H D.7856H,1011H(3 3)数据交换指令)数据交换指令XCHGXCHGl语句格式:XCHG OPD,OPSl功能:将源地址与目的地址中的内容互换。即 (OPD)OPS,(OPS)OPD。l不允许两操作数同时为存储器。不允许两操作数同时为存储器。l【例2.9】寄存器与存储器之间数据交换。 MOVAX,5678H ;(AX)=5678H MOVBX,0FFFFH;(BX)=0FFFFH XCHGAX,BX;

21、(AX)=0FFFFH, ( BX)=5678H(4 4)查表转换指令)查表转换指令 XLATXLATl语句格式:XLATl功能:(BX+AL)AL。l执行XLAT之前,表首地址BX,表项序号AL; XLAT执行之后,指定序号的表项AL。例:例:l1、阅读程序,说明程序执行后AX,BX的值;MOV AX,2000HMOV BX,3010HPUSH AXPUSH BXPOP AXPOP BXAX= _,BX=_例:例:l2、运行如下程序,写出运行结果MOV DX, 2000HMOV WORD PTR2000H, 2340H ;PTR指定存储器操作数的类型MOV BX, 2000HPUSH BXP

22、USH DXPOP AXPOP CXINT 3结果为: AX= ? BX= ? DX= ? CX= ?例:例:l3、已知(DS)=1000H,(BX)=0200H,(SI)=02H,内存10200H10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。l下列每条指令执行完后AX寄存器的内容是什么?l1)MOV AX,200H答:_;l2)MOV AX,BX_;l3)MOV AX,3BX_;l4)MOV AX,2BX+SI_。2.2.输入输入/输出指令输出指令 1)输入指令INl输入指令用来从指定的外存储器取信息送入累加器。l语句格式:IN AL,PORT 功能:(PORT

23、) AL2)输出指令OUTl输出指令用来把累加器的内容送往指定的外设存储器。l语句格式:OUT PORT,AL l 功能:(AL)PORT3 3 目标地址传送指令目标地址传送指令l(1)传送有效地址指令 LEAl(2)传送有效地址及数据段首址指令LDSl(3)传送有效地址及附加数据段指令LES(1 1)传送有效地址指令)传送有效地址指令 LEALEAl语句格式: LEA reg16,meml功能:将操作数mem的有效地址(偏移地址)有效地址(偏移地址)送入指定寄存器。l【例2.10】主存偏移地址的获取。lMOV BX,0100H;(BX)=0100HlMOV SI, 0210H ;(SI)=0

24、210HlLEA BX,1234BX+SI; (BX)=1544Hl注意注意LEALEA与与MOVMOV的区别。的区别。l若变量BUF所在地址2000:1234H,(BUF)=10H.l请分析执行以下指令时AX的值: LEA AX,BUF MOV AX,BUF MOV AX,OFFSET BUF(2 2)传送有效地址及数据段首址指令)传送有效地址及数据段首址指令LDSLDSl语句格式:LDS reg16LDS reg16,mem32mem32l功能:将主存中指定字单元数据送入指定存储器,下一字单元数据送DS寄存器。即:mem32:mem32+1mem32:mem32+1 reg16reg16

25、mem32+2:mem32+3 mem32+2:mem32+3 DSDSl例:设DS=C000H,存储单元内容为(C0020)=82H (C0021)=01H(C0022)=00H (C0023)=20H则执行语句:LDS SI,0020H SI=?DS=?(3 3)传送有效地址及附加数据段指令)传送有效地址及附加数据段指令LESLESl语句格式:LES LES reg16reg16,mem32mem32l功能:将主存某字单元内容送指定寄存器。即mem32:mem32+1mem32:mem32+1 reg16reg16 mem32+2:mem32+3 mem32+2:mem32+3 ESES4

26、 4 标志传送指令标志传送指令l(1 1)标志送)标志送AHAH指令指令LAHFLAHFl(2 2)AHAH送标志指令送标志指令SAHFSAHFl(3 3)标志寄存器进栈指令)标志寄存器进栈指令PUSHFPUSHFl(4 4)标志寄存器出栈指令标志寄存器出栈指令POPFPOPF(1 1)标志送)标志送AHAH指令指令LAHFLAHFl语句格式:LAHFLAHFl功能:将标志寄存器的低将标志寄存器的低8 8位送入位送入AHAH寄存器。寄存器。l即(FLAGS)7-0AH。该指令的执行对标志位无影响。l【例2.11】标志寄存器传送。l执行前:(FLAGS)=0485H,(AX)=0000Hl执行指

27、令:LAHF(2 2)AHAH送标志指令送标志指令SAHFSAHFl语句格式:SAHFl功能:将AH的内容送入标志寄存器的低8位,高8位不变。即(AH) FLAGS7-0。l从该指令功能可看出,SAHF为LAHF的逆过程。 (3 3)标志寄存器进栈指令)标志寄存器进栈指令PUSHFPUSHFl语句格式:PUSHFPUSHFl功能:将标志寄存器的内容压入堆栈。即(FLAGS)(SP)。SP-2SPSP-2SPFRFR高高8 8位位 SP+1SP+1FRFR低低8 8位位SPSP(4 4)标志寄存器出栈指令)标志寄存器出栈指令POPFPOPFl功能: 将栈顶内容弹出送入标志寄存器中。将栈顶内容弹出

28、送入标志寄存器中。即(SP)FLAGS。lPOPF指令与PUSHF指令互为逆过程。l【例2.12】将标志寄存器的单步标志TF置位。lPUSHF;(FLSGS)(SP)lPOP AX;(SP)AXlOR AX, 0100H ;设置D8=TF=1lPUSH AX;(AX)(SP)lPOPF;(SP)FLAGS,即(AX)FLAGS2.3.2 算术运算类指令算术运算类指令l1 加法类指令加法类指令l2 减运算指令减运算指令l3 乘运算指令乘运算指令l4 除运算指令除运算指令l5 转换指令转换指令返回本节返回本节1 加法指令加法指令l(1)不带进位加法指令ADDl(2)带进位加指令ADCl(3)加1指

29、令INCl(4)加法调整指令DAA(1 1)不带进位加指令)不带进位加指令ADDADDl 语句格式:ADD dest, rscl功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。l即(destdest)+ +(rscrsc)destdest。l注意:注意: 1 1、destdest, rsc rsc可以是寄存器(段寄存器除可以是寄存器(段寄存器除外)、变量;外)、变量; 2 2、 rscrsc可以是立即数;可以是立即数; 3 3、不允许、不允许destdest, rsc rsc同时为存储器变量;同时为存储器变量; 4 4、位数必须匹配;、位数必须匹配; 5 5、加法指令

30、会影响、加法指令会影响OFOF、SFSF、ZFZF、PFPF、CFCF例:执行完以下指令后,AL=?OF=?SF=?CF=?MOV AL,7EHMOV BL,5BHADD AL,BL(2 2)带进位加法指令)带进位加法指令ADCADCl语句格式:ADC dest,srcl功能:将目的操作数加源操作数再加低位进位,结果送目的地址。l即(destdest)+ +(srcsrc)+CF dest+CF dest。l【例2.13】无符号双字加法运算。lMOV AX,4652H;(AX)=4652HlADD AX,0F0F0H ;(AX)=3742H,CF=1lMOV DX,0234H;(DX)=023

31、4HlADC DX,0F0F0H ;(DX)=0F325H,CF=0(3 3)加)加1 1指令指令 INCINCl 语句格式:INC destl功能:将目的操作数加1,结果送目的地址。即( dest dest )+1 dest +1 dest 。lINC指令是一个单操作数指令,操作数可以是寄存器(段寄存器除外)或存储器操作数。l如:INC BX,即(BX)+1BX。l加1指令可用于对计数器和地址指针进行调整。 (4 4)加法的十进制调整指令)加法的十进制调整指令DAA DAA l语句格式:语句格式:DAA(DAA(指令隐含寄存器操作数指令隐含寄存器操作数AL)AL)l功能:如果AL寄存器中低4

32、位大于9或辅助进位(AF)=1,则(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)+60H且(CF)=1。同时,SF、ZF、PF均有影响l【例2.23】压缩BCD码的加法运算。lMOV AL,68H;(AL)=68H,表示压缩BCD码68lMOV BL,28H;(BL)=28H,表示压缩BCD码28lADD AL,BL;二进制加法:(AL)=68H+28H=90HlDAA ;十进制调整:(AL)=96Hl ;实现压缩BCD码加法:68+28=96l阅读下列程序,说明程序执行后 AH.AL.CF.Z单元的值 MOV AH, 0 MOV AL, X

33、ADD AL, Y DAA ADC AH, O MOV Z AL INT 3X DB 88HY DB 76HZ DB ?AH= _,AL=_,CF= _,Z单元的值= 。2 减运算指令减运算指令l(1)不带借位减法指令SUBl(2)带借位减指令 SBBl(3)减1指令DECl(4)求补指令NEGl(5)比较指令 CMPl(6)减法十进制调整指令DASl (1 1)不带借位减法指令)不带借位减法指令SUBSUBl语句格式:SUB dest,rscl功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。l即(destdest)- -(rscrsc)destdestl【例2.14】减法运算。

34、lMOV AX ,5678H;(AX)=5678HlSUB AX ,1234H;(AX)=4444HlMOV BX ,3354H;(BX)=3354HlSUB BX ,3340H;(BX)=0014Hl(2 2)带借位减指令)带借位减指令 SBBSBBl语句格式:SBB dest ,rscl功能:目的操作数减源操作数再减低位借位CF,结果送目的地址。l即(destdest)- -(rscrsc)-CF OPD-CF OPDl (3)减1指令DECl 语句格式:DEC dest l功能:将目的操作数减1,结果送目的地址。即(dest)-1dest。lDEC指令是一个单操作数指令,操作数可以是寄存

35、器或存储器操作数。l如:DEC CX。即(CX)-1CX。l减1指令DEC也一般用于对计数器和地址指针的调整。l例:设例:设CL=0CL=0,当执行,当执行DEC CLDEC CL指令后,指令后,CL=_H.CL=_H.l(4)求补指令NEGl语句格式:NEG destl功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。【例2.15】求补运算。lMOV AX,0FF64HlNEG AL;(AX)=0FF9CHlSUB AL,9DH;(AX)=0FFFFHlNEG AX;(AX)=0001HlDEC AL;(AX)=0000HlNEG AX;(AX)=0000Hl例:有程序段如

36、下:l MOV AX, 8080Hl NEG AXl MOV BX, AXl NOT BXl INT 3l 执行该程序后,AX=?BX=?l (5 5)比较指令)比较指令 CMPCMPl 语句格式:CMP dest,srcl功能:目的操作数减源操作数,结果只影响标结果只影响标志位,不送入目的地址。志位,不送入目的地址。 即(destdest)- -(srcsrc)。)。l【例2.16】比较AL的内容数值大小。lCMP AL,50;(AL)50lJB BELOW ;(AL)=50, ;(AL)50ALlINC AH;(AH)+1AHlBELOW:(6 6)减法的十进制调整指令)减法的十进制调整指

37、令DASDASl 语句格式:DAS(隐含AL)l功能:如果(AF)=1或AL寄存器中低4位大于9,则(AL)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,则(AL)=(AL)60H且(CF)=1。同时SF、ZF、PF均受影响l【例2.24】压缩BCD码的减法运算。lMOV AL,68H ;(AL)=68H,表示压缩BCD码68lMOV BL,28H ;(BL)=28H,表示压缩BCD码28lSUB AL,BL ;二进制减法:(AL)=68H28H=40HlDAS ;十进制调整:(AL)=40Hl ;实现压缩BCD码减法:6828=40返回返回2.3.23 乘法运算指令乘法运

38、算指令l(1)无符号数乘法指令MULl(2)有符号乘指令IMUL(1 1)无符号数乘法指令)无符号数乘法指令MULMULl 语句格式: MUL srcl功能: 若是字节数据相乘,(AL)与src相乘得到字数据存入AX中;若是字数据相乘,则(AX)与src相乘得到双字数据,高字存入DX、低字存入AX中。l即字节乘法:(即字节乘法:(ALAL)* * (srcsrc) AX AX, 字乘法:(字乘法:(AXAX) * * (srcsrc) DX DX,AXAX l【例2.17】无符号数0A3H与11H相乘。 lMOV AL,0A3H ;(AL)=0A3HlMOV BL,11H;(BL)=11HlM

39、UL BL ;(AX)=0AD3H(2 2)有符号乘指令)有符号乘指令IMULIMULl语句格式:语句格式:IMUL IMUL srcsrcl功能:字节乘法:(功能:字节乘法:(ALAL)* *(srcsrc)AXAX,字乘法:字乘法:(AXAX)* *(srcsrc)DXDX、AXAX。lIMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。 【例2.18】有符号数0B4H与11H相乘。lMOV AL,0B4H;(AL)=B4HlMOV BL,11H;(BL)=11HlIMULBL;(AX)=0FAF4H返回返回2.3.24 除运算指令除运算指令l(1)无符号除指令D

40、IVl(2)有符号除指令IDIVl(1 1)无符号除指令)无符号除指令DIVDIVl语句格式:DIV srcl功能:l 字节除法(AX)/(src) AL(商)、AH(余数)l 字除法(DX、AX)/(src) AX(商)、DX(余数)l【例2.19】写出实现无符号数0400H/0B4H运算的程序段。lMOV AX,0400H;(AX)=0400HlMOV BL,0B4H ;(BL)=0B4HlDIV BL ;商(AL)=05H,余数(AH)=7CH (2 2)有符号除指令)有符号除指令IDIVIDIV 语句格式:IDIV rsc 功能:l字节除法:字节除法:(AX(AX)/ /(rscrsc

41、) AL AL(商)、商)、AHAH(余数)余数)l字除法:字除法:(DX(DX,AXAX)/ /(rscrsc)AXAX(商)、商)、DXDX(余数)余数)l除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。l【例2.20】写出实现有符号数0400H /0B4H运算的程序段。lMOV AX,0400H;(AX)=0400HlMOV BX,0B4H;(BX)=0B4HlIDIVBX;(AL)=0F3H,(AH)=24H5. 转换指令 l(1)字节转换成字指令CBWl(2)将字转换成双字指令CWDl (1 1)字节转换成字指令)字节转换成字指令CBWCBWl 语句格式:CBWl功能:

42、将AL中的符号位复制到AH的所有位。l【例2.21】将字节数据扩展成字数据。lMOV AL,0A5H ;(AL)=0A5HlCBW ;(AX)=0FFA5HlADD AL,70H;(AL)=15HlCBW ;(AX)=0015Hl(2 2)将字转换成双字指令)将字转换成双字指令CWDCWDl语句格式:CWDl功能:将AX中的符号位复制到DX得所有位。l【例2.22】将字数据扩展成双字数据。lMOV DX, 0;(DX)=0lMOV AX, 0FFABH ;(AX)=0FFABHlCWD;(DX)=0FFFFH (AX)=0FFABH返回返回2.3.22.3.3 逻辑运算与移位指令逻辑运算与移位

43、指令l1 逻辑运算指令逻辑运算指令l2 移位、循环移位指令移位、循环移位指令 返回本章首页返回本章首页1 逻辑运算指令逻辑运算指令l(1)逻辑乘指令ANDl(2)测试指令TESTl(3)逻辑加指令ORl(4)按位加指令XORl(5)求反指令NOTl (1)逻辑与指令ANDl 语句格式:AND dest, rscl 功能:将目的操作数和源操作数执行逻辑与,结果存dest 。l即(dest)(rsc) dest 。l该指令可用于清除目的操作数中与源操作数置0的对应位。说明:逻辑与的运算法则为:11=1,10=0,01=0,00=0l【例2.26】将AL中第3位和第7位清零。l MOVAL,0FFH

44、 l ANDAL,77H l(2 2)测试指令)测试指令TESTTESTl语句格式:TEST dest, rscl功能:源地址和目的地址的内容执行按位的逻按位的逻辑与运算辑与运算,结果不送入目的地址。只影响标志只影响标志位。位。l即(dest)(rsc)。l【例2.27】测试AX中的第12位是否为0,不为0则转L。lTEST AX,1000HlJNE L l (3 3)逻辑或指令)逻辑或指令ORORl 语句格式:OR dest, rsc l功能:将目的操作数和源操作数进行逻辑或运将目的操作数和源操作数进行逻辑或运算,结果存目的地址。算,结果存目的地址。l即(即(destdest)(rscrsc

45、)destdest 。l说明:逻辑加的运算法则为:11=1,10=1,01=1,00=0。l【例2.28】将AL寄存器中第3位和第7位置1。lMOVAL,0 lOR AL,88H l(4 4)异或指令)异或指令XORXORl语句格式: XOR destXOR dest, rsc rsc l功能:目的操作数与源操作数做按位加运算功能:目的操作数与源操作数做按位加运算,结果送入目的地址。,结果送入目的地址。l即(即(destdest)(rsc) dest (rsc) dest 。l说明:按位加的运算法则为;11=0,10=1,01=1,00=0。l【例2.29】按位加运算。lMOV AL,45H

46、;(AL)=45HlXOR AL,31H ;(AL)=74Hl(5 5)求反指令)求反指令NOTNOTl语句格式:语句格式:NOT destNOT destl功能:将目的地址中的内容逐位取反后送入目的取反后送入目的地址。地址。l【例2.25】逻辑非运算。lMOV AX,878AH;(AX)=878AHlNOT AX, ;(AX)=7875H返回返回2.3.32 2. . 移位指令移位指令 l 移位指令包括算术移位指令、逻辑移位指令算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作和循环移位指令,分别进行左移和右移操作。l 其功能为将目的操作数的所有位按操作符规目的操作数的所有位按

47、操作符规定的方式移动定的方式移动1 1位或按寄存器位或按寄存器CLCL规定的次数(规定的次数(0 0255255)移动,结果送入目的地址)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。l(1 1)算术左移和逻辑左移指令)算术左移和逻辑左移指令SALSAL(SHLSHL)l语句格式:SAL destdest ,1 或SHL destdest ,1l SAL destdest ,CL或SHL destdest ,CLl功能:将(将(destdest)向左移动向左移动CLCL指定的位数,指定的位数,最低位补入相应的,的内容为最后移最低位补入相应的,的内容为最后移入位的

48、值。入位的值。l例例1 1:AX=A450AX=A450,CL=02H,CL=02H,则执行指令则执行指令SAL SAL AX,CLAX,CL后,后,AX=?CF=?AX=?CF=?l例例2 2:AX=0020AX=0020,CL=02H,CL=02H,则执行指令则执行指令SAL SAL AX,CLAX,CL后,后,AX=?CF=?AX=?CF=?l例例3 3:用用SHLSHL指令实现指令实现AX=AXAX=AX* *12.12.解:解: AX=AXAX=AX* *12=AX12=AX* *4+AX4+AX* *8 8 MOV CL,2 MOV CL,2 SHL AX,CL SHL AX,CL

49、 MOV BX,AX MOV BX,AX SHL AX,1 SHL AX,1 ADD AX,BX ADD AX,BXl(2 2)逻辑右移指令)逻辑右移指令SHRSHRl语句格式:SHR dest,1或SHR dest,CLl功能:将(dest)向右移动CL规定的次数,最高位补入相应个数的,CF的内容为最后移入位的值。 l例:读下列程序,回答问题。l MOV DH, 25Hl MOV AL, DHl MOV CL. 4l SHR AL, CLl OR AL, 30Hl MOV BH, ALl MOV AL, DHl AND AL, OFHl OR AL, 30Hl MOV BL, ALl INT

50、 3 l 运行程序后,BH=?BL=?BH=?BL=?(3 3)算术右移指令)算术右移指令SARSARl语句格式:SAR destdest ,1或SAR destdest ,CLl功能:将(destdest)向右移动CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。l【例2.30】算术右移运算。lMOV BH,0F4H ;(BH)=0F4HlMOV CL, 2;(CL)=2lSAR BH, CL ;(BH)=9DH,(CF)=0l该例语句“SARBH,CL”实际上完成了(BH)BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。(4 4)循环左移指令)循环左

51、移指令ROLROLl语句格式:ROL dest,1或ROL dest,CLl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动CL规定的次数。CF的内容为最后移入位的值。l例:AL=0B7H,CL=2l ROL AL,CL后AL=?CF=?l(5 5)循环右移指令)循环右移指令RORRORl语句格式: ROR dest,1或ROR dest,CLl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动CL规定的次数,CF的内容为最后移入位的值。l例:AL=95H,CL=2l ROR AL,CL后AL=?CF=?l(6 6)带进位的循环左移指令)带进位的循

52、环左移指令RCLRCLl语句格式: RCL OPD, 1或RCL OPD,CLl功能:将目的操作数连同CF标志一起向左循环移动CL规定的次数。l(7 7)带进位的循环右移指令)带进位的循环右移指令RCRRCRl语句格式:RCR OPD,1或RCR OD,CLl功能:将目的操作数连同CF标志一起向右循环移动所规定的次数。 返回本节首页返回本节首页2.3.4 串操作类指令串操作类指令l串操作指令 :l 数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。l 为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。 l重复前缀指令重复前缀

53、指令REP REPZ REPNZREP REPZ REPNZl(1 1)REPREP lREP前缀用在MOVS、STOS 、LODS指令前。l功能:每执行一次串指令(CX)1,直到(CX)=0,重复执行结束。l(2 2)REPZREPZ l该指令一般用在CMPS、SCAS指令前。l功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。l(3 3)REPNZREPNZ l该指令一般用在CMPS、SCAS 指令前。l功能:每执行一次串指令(CX)1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。l1 1串传送指令串传送指令MOV

54、SMOVSl语句格式: MOVSBMOVSB字节串传送字节串传送 MOVSWMOVSW字串传送字串传送l功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。l即:(DSDS:SISI)ESES:DIDI。l 当当DF=0DF=0时,(时,(SISI)和(和(DIDI)增量。增量。 当当DF=1DF=1时,(时,(SISI)和(和(DIDI)减量。减量。l例:编写程序,将数据段中首地址位100H的100个字节,传输到附加段首地址为200H的内存中。MOV SI,100H MOV SI,100H ;首地

55、址;首地址MOV DI,200H MOV DI,200H ;目的地址;目的地址MOV CX,100 MOV CX,100 ;待传送的字节数;待传送的字节数CLD CLD ;清;清DFDF标志标志REP MOVSB REP MOVSB ;循环传送;循环传送l 2 2串比较指令串比较指令CMPSCMPS l语句格式: CMPSB字节串比较 CMPSW字串比较l功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。l即:(SI)(DI)。 修改串指针,使之指向串中的下一个元素 当DF=0时,(S

56、I)和(DI)增量。当DF=1时,(SI)和(DI)减量。l例:设内存中有两个长度都是20字节的串,串的首地址分别为STRING1和STRING2,编写执行串比较的程序。 LEA SI, STRING1 LEA DI, STRING2 MOV CX,20 CLD REPE CMPSBl3 3串搜索指令串搜索指令SCASSCASl语句格式: SCASB字节串搜索 SCASW字串搜索l功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位,结果不保存,l即: 字节操作:(AL)(DI),字操作:(AX)(DI)。 修改指针使之指向串

57、中的下一个元素。l当DF=0时,(DI)增量。当DF=1时,(DI)减量。l 4 4从源串中取数指令从源串中取数指令LODSLODSl语句格式: LODSB从字节串中取数 LODSW从字串中取数l功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。l即: 字节操作:(SI)AL,字操作:(SI)AX。 修改指针SI,使它指向串中的下一个元素 当DF=0时,(SI)增量。当DF=1时,(SI)减量。 l5 5往目的串中存数指令往目的串中存数指令STOSSTOSl语句格式: STOSB往字节串中存数 STOSW往字串中存数l功能:将AL或AX中的数据送入DI所指的

58、目的串中的字节(或字)存储单元中。l即: 字节操作:(AL)DI,字操作:(AX)DI。l 修改指针DI,使之指向串中的下一个元素。l当DF=0时,(DI)增量)。当DF=1时,(DI)减量。返回本节返回本节2.3.5 控制转移类指令控制转移类指令l1 无条件转移指令无条件转移指令l2 条件转移指令条件转移指令l3 循环控制指令循环控制指令 l4 过程调用指令过程调用指令l5 中断指令中断指令1 无条件转移指令无条件转移指令表表2.4 无条件转移指令的语句格式及功能无条件转移指令的语句格式及功能返回返回2.3.52 条件转移指令(条件转移指令(JXX)l(1)简单条件转移指令l(2)无符号数条件转移指令l(3)有符号数条件转移指令 l它们都有通用的语句格式和功能。l语句格式: 标号: 操作符 短标号(1 1)简单条件转移指令)简单条件转移指令(2 2)无符号数条件转移指令无符号数条件转移指令l表2.2无符号数条件转移指令l【例2.31】比较无符号数大小,将较大的数存放AX寄存器。lCMP AX, BX ;(AX)(BX)lJNB NEXT;若AX=BX,转移到NEXTlXCHG AX,BX ;若AX=BX,转移到NEXTlXCHG AX,BX;若AXBX,交换lNEXT:l有程序段如下: MOV AH, OFFHMOV AL, 0CMP AH, ALJGE NON_NEGM

温馨提示

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

评论

0/150

提交评论