《完美版课件第3章节MCS51单片机指令系统.ppt》由会员分享,可在线阅读,更多相关《完美版课件第3章节MCS51单片机指令系统.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章MCS-51单片机指令系统第一节第一节 MCS-51指令系统的分类、格式及一般说明指令系统的分类、格式及一般说明第二节第二节 寻址方式寻址方式第三节第三节 分类指令分类指令1 高级语言高级语言如如C+汇编语言汇编语言如如MCS-51指令指令汇编汇编目标文件目标文件按照语法格式按照语法格式编写源程序编写源程序*.ASM *.C按照语法格式按照语法格式将源程序翻译将源程序翻译成机器代码成机器代码计算机识别的计算机识别的二进制代码二进制代码*.OBJ第一节第一节 MCS-51指令系统的分类、格式及一般说明指令系统的分类、格式及一般说明2一、一、111条条MCS-51指令的分类方法指令的分类方法
2、按照每条指令执行时间划分:按照每条指令执行时间划分:1、单单机器周期(机器周期(12个振荡周期)有个振荡周期)有64条条2、双双机器周期(机器周期(24个振荡周期)有个振荡周期)有45条条3、四四机器周期(机器周期(48个振荡周期)有个振荡周期)有2条条按照每条指令翻译成字节数划分:按照每条指令翻译成字节数划分:1、单单字节指令,有字节指令,有49条条2、双双字节指令,有字节指令,有45条条3、三三字节指令,有字节指令,有17条条按照指令功能划分:按照指令功能划分:数数据据传传递递与与交交换换、算算术术运运算算、逻逻辑辑运运算算、程程序序转转移移、布布尔尔处处理理操操作作、CPU控制等控制等6
3、类。类。布尔处理操作类指令又称位操作指令。布尔处理操作类指令又称位操作指令。3一般分为两部分:操作码和操作数一般分为两部分:操作码和操作数操作码操作码:规定指令进行什么操作:规定指令进行什么操作 操作数操作数:表示指令操作的对象,:表示指令操作的对象,可以是数或是数据所在的地址,但最终对象都是数据。可以是数或是数据所在的地址,但最终对象都是数据。汇编语言格式为汇编语言格式为:标号:标号:操作码助记符操作码助记符 目的操作数,目的操作数,源操作数源操作数 ;注释;注释 MAIN:MOVA ,#20H ;#二、指令格式二、指令格式按指令的字节数按指令的字节数(机器语言机器语言)不同,分为一字节指令
4、,二字节指令,三字节指令不同,分为一字节指令,二字节指令,三字节指令 1.一字节指令一字节指令8位编码,既包含操作码,又包含操作数位编码,既包含操作码,又包含操作数如果指令无操作数(如指令:如果指令无操作数(如指令:NOP)或,操作数都在或,操作数都在Rn,A,B,DPTR,C中,中,则该指令一定是一字节指令。则该指令一定是一字节指令。4a.如如 INC DPTR b.INC Ac.b.若若是是有有工工作作寄寄存存器器,则则指指令令码码中中的的rrr三三位位的的不不同同编编码码来来指指定该寄存器定该寄存器c.MOV A,Rn指令码为指令码为11101rrr(E8HEFH)2.二字节指令二字节指
5、令16位编码,既包含操作码,又包含操作数位编码,既包含操作码,又包含操作数如果指令操作数只有一个如果指令操作数只有一个8位直接地址或立即数,则该指令一定是二字节指令。位直接地址或立即数,则该指令一定是二字节指令。操作码操作码 24H操作数操作数 22HADD A,#22H0010010000100010ADD A,22H操作码操作码 25H操作数操作数 22H0010010100100010操作码操作码 04H操作码操作码 A3H101000110000010053.三字节指令三字节指令 24位编码,既包含操作码,又包含操作数位编码,既包含操作码,又包含操作数 如果指令操作数有两个如果指令操作
6、数有两个8位直接地址或是立即数,或是位直接地址或是立即数,或是16位直接地址,位直接地址,则该指令一定是三字节指令。则该指令一定是三字节指令。操作码操作码 85H源操作数源操作数 4FHMOV 5EH,4FH操作码操作码 75H目的操作数目的操作数 5EHMOV 5EH,#4FH操作码操作码 90H操作数高八位操作数高八位 5EH操作数低八位操作数低八位 4FHMOV DPTR,#5E4FH目的操作数目的操作数 5EH源操作数源操作数 4FH6三、三、指令描述符号介绍指令描述符号介绍Rn当前选中的寄存器组中的当前选中的寄存器组中的8个工作寄存器个工作寄存器R0R7(n=07)。)。Ri当前选中
7、的寄存器组中的可作为间接寻址寄存器使用的当前选中的寄存器组中的可作为间接寻址寄存器使用的2个工作寄存器个工作寄存器R0、R1(i=0,1)。)。direct8位的内部数据存储器单元中的地址。可以是内部位的内部数据存储器单元中的地址。可以是内部RAM单元地址或专用寄存器地单元地址或专用寄存器地址。址。75H、0A5H、P1#data包含在指令中的包含在指令中的8位立即数。位立即数。#75H、#80H、#0A5H#data16包含在指令中的包含在指令中的16位立即数。位立即数。#2480H、#0D256Haddr1616位目的地址。用于长转移指令中,能转移到位目的地址。用于长转移指令中,能转移到6
8、4KB程序存储器地址空间的任程序存储器地址空间的任何地方。何地方。addr1111位位目目的的地地址址。目目的的地地址址应应与与下下一一条条指指令令第第一一个个字字节节在在同同一一个个2KB程程序序存存储储器器的地址空间之内。的地址空间之内。rel8位位带带符符号号的的偏偏移移字字节节,简简称称偏偏移移量量。偏偏移移量量相相对对于于下下一一条条指指令令的的第第一一个个字字节节计计算算,在在-128-+127范围内取值。范围内取值。7间址寄存器或基址寄存器的前缀,间址寄存器或基址寄存器的前缀,如如Ri,DPTR。/位操作数的前缀,表示对该位操作数取反,位操作数的前缀,表示对该位操作数取反,如如/
9、bit。片内片内RAM的的直接地址直接地址或寄存器。或寄存器。()直接寻址方式中,表示直接地址直接寻址方式中,表示直接地址X中的内容。中的内容。注释用注释用(())在间接寻址方式中,表示由间址寄存器在间接寻址方式中,表示由间址寄存器X指出的地址单元中的内容。指出的地址单元中的内容。注释用注释用 箭头左边的内容被箭头右边的内容所代替。箭头左边的内容被箭头右边的内容所代替。注释用注释用DPTR数据指针,可用作数据指针,可用作16位地址寄存器。位地址寄存器。bit内部内部RAM或专用寄存器中的直接寻址位。或专用寄存器中的直接寻址位。A累加器。累加器。ACC 直接寻址方式的直接寻址方式的累加器累加器。
10、B专用寄存器,用于乘法和除法指令中。专用寄存器,用于乘法和除法指令中。CY进位标志或进位位,或布尔处理机中的累加器。进位标志或进位位,或布尔处理机中的累加器。8第二节第二节寻址方式寻址方式1、寄存器寻址寄存器寻址2、直接寻址直接寻址3、寄存器间接寻址寄存器间接寻址4、立即寻址立即寻址5、变址寻址变址寻址6、相对寻址相对寻址7、位寻址位寻址返回本章首页寻址方式寻址方式找到存放数据的地址,提取操作数找到存放数据的地址,提取操作数.91.寄存器寻址方式寄存器寻址方式 操作数给出形式为寄存器,操作数给出形式为寄存器,操作对象(数据)存放在寄存器当中操作对象(数据)存放在寄存器当中 例如:例如:MOV
11、A ,R0 MOV R0,A寄存器:寄存器:a.工作寄存器:工作寄存器:Rn b.部分专用寄存器:部分专用寄存器:A、B、DPTR、C 这里源操作数和目标操作数均采用寄存器寻址。这里源操作数和目标操作数均采用寄存器寻址。10如果程序状态寄存器如果程序状态寄存器PSW的的RS1RS0=10(选中第二组工作寄存器,对应地选中第二组工作寄存器,对应地址为址为10H17H),),设累加器设累加器A的内容为的内容为4AH,则执行则执行MOVR1,A指令后,指令后,内部内部RAM11H单元的值就变为单元的值就变为4AH,如如寄存器寻址示意图寄存器寻址示意图所示。所示。寄存器寻址示意图寄存器寻址示意图4AH
12、4AH11H11H内部内部内部内部 RAMRAM4AH4AHA AR1R11 10 0RS1RS1 RS0RS0112.直接寻址方式:直接寻址方式:操作数给出形式为单元地址,操作数给出形式为单元地址,操作对象(数据)存放在单元地址当中操作对象(数据)存放在单元地址当中 例如:例如:MOV A ,5BH MOV 5BH,A直接地址:直接地址:a.内部内部RAM低低128字节区字节区 b.专用寄存器区专用寄存器区(直接寻址是访问(直接寻址是访问SFR区的唯一方法)区的唯一方法)既可用单元地址形式给出,也可用寄存器符号给出既可用单元地址形式给出,也可用寄存器符号给出MOV A ,P1 (二字节指令)
13、二字节指令)MOV A,90H(二字节指令)二字节指令)12直接寻址示意图直接寻址示意图88H88H2BH2BH内部内部内部内部 RAMRAM88H88HA A例如指令:例如指令:MOVA,2BH执行的操作是将内部执行的操作是将内部RAM中地址为中地址为2BH的单的单元内容传送到累加器元内容传送到累加器A中,其操作数中,其操作数2BH就是存放数据的单元地址,因此就是存放数据的单元地址,因此该指令是直接寻址。该指令是直接寻址。设内部设内部RAM2BH单元的内容是单元的内容是88H,那么指令那么指令MOVA,2BH的执行的执行过程如立即数寻址示意图所示。过程如立即数寻址示意图所示。133.寄存器间
14、接寻址方式:寄存器间接寻址方式:寄存器寻址:寄存器寻址:寄存器当中存放的是操作对象寄存器当中存放的是操作对象 寄存器间接寻址:寄存器当中存放的是操作对象(数据)的地址,而不是操作对象本身。寄存器间接寻址:寄存器当中存放的是操作对象(数据)的地址,而不是操作对象本身。例如:例如:MOV 30H,#20H MOV R0,#30H MOV A ,R0 ;R0 A A=30H MOV A ,R0 ;(R0)A A=20H 寄存器间接寻址范围:寄存器间接寻址范围:a.访问内部访问内部RAM(SFR不能用于寄存器间接寻址)不能用于寄存器间接寻址):只能使用只能使用R0和和R1来作为间接寄存器,来作为间接寄
15、存器,用用Ri表示表示(i0、1)MOV A,Ri b.访问外部访问外部低低256字节字节 :MOVX A,Ri c.访问外部访问外部RAM所有所有64K字节:字节:MOVX A,DPTRd.访问内部访问内部RAMSP,SP隐含了隐含了PUSHB相当于相当于MOVSP,BPOPB相当于相当于MOVB,S注意注意:SFR不能用间接寻址方式,只能用不能用间接寻址方式,只能用 直接寻址方式直接寻址方式14片内片内RAMR0A30H寄存器寄存器间接寻址示意图间接寻址示意图34H30H34H例如:例如:MOVR0,A;内部内部RAM(R0)A其指令操作过程示意图如下图所示。其指令操作过程示意图如下图所示
16、。154.立即寻址方式:立即寻址方式:#操作数就是操作对象(数据)本身,操作数就是操作对象(数据)本身,此时把指令中操作数称为立即数,用此时把指令中操作数称为立即数,用#data表示表示例如:例如:MOV A ,#3AH MOV DPTR,#3F00H MOV 30H,#30H 唯一一条唯一一条16位立即寻址指令:位立即寻址指令:MOV DPTR ,#data162BH2BHA A2BH2BH例:例:MOVA,#2BH立即数寻址示意图立即数寻址示意图 MOV DPTR ,#3425H MOVX A,DPTR通常与通常与MOVX A,DPTR 类指令搭配使用,类指令搭配使用,#data16中表示
17、的是中表示的是16位的地址位的地址165.变址寻址方式:变址寻址方式:变变址址寻寻址址是是指指将将基基址址寄寄存存器器与与变变址址寄寄存存器器的的内内容容相相加加,结结果果作作为为操操作作数数的的地地址址。DPTR或或PC是是基基址址寄寄存存器器,累累加加器器A是是变变址址寄寄存存器器。该该类类寻寻址址方方式式主主要要用用于于查查表表操操作作即即访访问问程程序序存存储储器器(ROM)中中的的数数据据表表格格,专专门门针针对对程程序存储器的寻址方式。序存储器的寻址方式。例如,指令例如,指令MOVCA,A+DPTR执行的操作是将累加器执行的操作是将累加器A和基址寄存器和基址寄存器DPTR的内容相加
18、,相加结果作为操作数存放的地址,再将操作数取出来送的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器到累加器A中。中。只有三条:只有三条:MOVC A,A+DPTR;A(A+DPTR)MOVC A,A+PC;A(A+PC)JMP A+DPTR ;程序跳转到以程序跳转到以 A+DPTR为地址的单元为地址的单元17变址寻址示意图变址寻址示意图10HA2010H2000HDPTR99H99HMOVC A,A+DPTR18.相对寻址方式:相对寻址方式:相对寻址是指程序计数器相对寻址是指程序计数器PC的当前内容的当前内容与指令中的操作数相加,其结果作为跳与指令中的操作数相加,其结果作为
19、跳转指令的转移地址(也称目的地址)。相对寻址用于修改转指令的转移地址(也称目的地址)。相对寻址用于修改PC值,主要用于实现程序值,主要用于实现程序的的分支转移(跳转)分支转移(跳转)。相当于。相当于C语言中的语言中的goto语句。语句。例如:例如:SJMPrel;PCrelPC注意两点:注意两点:a.当前当前PC值值:执行完该条相对寻址指令后的:执行完该条相对寻址指令后的PC值值所以有:目的地址指令地址指令长度所以有:目的地址指令地址指令长度relb.rel为为8位补码位补码:128+127,负数表示向后转移,正数表示向前转移负数表示向后转移,正数表示向前转移以指令地址为基点:以指令地址为基点
20、:向地址增大方向,最大可转移(向地址增大方向,最大可转移(127指令长度)个单元地址,指令长度)个单元地址,向地址减小方向,最大可转移(向地址减小方向,最大可转移(128指令长度)个单元地址指令长度)个单元地址。只适用于程序存储器空间只适用于程序存储器空间19例如,例如,SJMP 06H ;PCPC+2+06H指令操作示意图如图指令操作示意图如图3-5所示。所示。80H08H0300H0301H0302H转移指令地址PC当前PC值0308HPCrel(06H)20七、七、位寻址位寻址位位寻寻址址只只能能对对有有位位地地址址的的单单元元作作位位寻寻址址操操作作。位位寻寻址址其其实实是是一一种种直
21、直接接寻寻址址方方式式,不不过过其其地地址址是是位位地地址址。在在进进行行位位操操作作时时,用用进进位位位位C作作为为位位累累加加器器。位地址在指令中用位地址在指令中用bit表示。表示。MOVC,3AHMOVPSW.3,C寻址范围:寻址范围:a.内部内部RAM中的位寻址区:中的位寻址区:16个字节单元个字节单元:20H2FH128位位:00H7FHb.专用寄存器的可寻址位:专用寄存器的可寻址位:可供位寻址的专用寄存器可供位寻址的专用寄存器11个,实际寻址位个,实际寻址位83个,即有些位不能寻址个,即有些位不能寻址表示方法:表示方法:直接使用位地址:例如直接使用位地址:例如PSW第第5位位:0D
22、5H位名称位名称:F0单元地址加位单元地址加位:0D0H.5专用寄存器符号名加位专用寄存器符号名加位:PSW.521寻址方式小结:寻址方式小结:寄存器寻址寄存器寻址:工作寄存器工作寄存器R0R7,A,B,DPTR直接寻址直接寻址:片内片内RAM低低128字节和专用寄存器区字节和专用寄存器区,这是这是SFR区的区的唯一寻址方式。唯一寻址方式。寄存器间接寻址寄存器间接寻址:片内片内RAM(R0,R1,SP)片外片外RAM(R0,R1,DPTR)变址寻址变址寻址:程序存储器程序存储器(用于访问程序存储器中的数据表格用于访问程序存储器中的数据表格)相对寻址相对寻址:程序存储器程序存储器256字节范围字
23、节范围(解决在解决在ROM内部程序的转内部程序的转移移)22第三节第三节分类指令分类指令按照指令的功能,可以把按照指令的功能,可以把MSC-51的的111条指令分成五类:条指令分成五类:l数据传送类指令(数据传送类指令(29条)条)l算术运算类指令(算术运算类指令(24条)条)l逻辑操作类指令(逻辑操作类指令(24条)条)l控制转移类指令(控制转移类指令(17条)条)l位操作类指令位操作类指令(17条)条)23数据传送类指令小节数据传送类指令小节l内部内部RAM间的数据传送指令(间的数据传送指令(16条)条)l访问外部访问外部RAM的数据传送指令(的数据传送指令(4条)条)l访问访问ROM程序
24、存储器的数据传送指令(程序存储器的数据传送指令(2条)条)l交换类指令(交换类指令(5条)条)l堆栈指令(堆栈指令(2条)条)24一、一、数据传送类指令数据传送类指令数据传送类指令数据传送类指令共共29条条l内部内部RAM间的数据传送指令(间的数据传送指令(16条)条)l访问外部访问外部RAM的数据传送指令(的数据传送指令(4条)条)l访问访问ROM程序存储器的数据传送指令(程序存储器的数据传送指令(2条)条)l交换类指令(交换类指令(5条)条)l堆栈指令(堆栈指令(2条)条)25通用格式为:通用格式为:MOV,传送指令的约定:从右向左传送数据,是将源操作数送传送指令的约定:从右向左传送数据,
25、是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。被源操作数取代。数据传送类指令用到的助记符有数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。种。26以以A为目的操作数的指令(为目的操作数的指令(4条)条)MOVA,Rn;A(Rn)如:如:MOVA,R2MOVA,direct;A(direct)如:如:MOVA,30HMOVA,0E3HMOVA,Ri;A(Ri)如:如:MOVA,R0MOVA,#data;Adata如:如:MOVA,#36HMOVA,#0D2
26、H27以以Rn为目的操作数的指令(为目的操作数的指令(3条)条)MOV Rn,A ;(Rn)(A)如:如:MOV R0,A MOV Rn,direct ;(Rn)(direct)如:如:MOV R3,30HMOV Rn,#data ;(Rn)data如:如:MOV R7,#36H MOV R1,#30 MOV R6,#01101100B28以直接地址为目的操作数的指令(以直接地址为目的操作数的指令(5条)条)MOV direct,A ;direct (A)如:如:MOV 30H,AMOV direct,Rn ;direct(Rn)如:如:MOV P1,R2MOV direct1,direct2
27、 ;(direct1)(direct2)如:如:MOV 38H,60HMOV direct,Ri ;direct (Ri)如:如:MOV TL0,R1MOV direct,#data ;direct data 如:如:MOV 58H,#36H 29以间接地址为目的操作数的指令(以间接地址为目的操作数的指令(3条)条)MOV Ri,A ;(Ri)(A)如:如:MOV R0,AMOV Ri,direct;(Ri)(direct)如:如:MOV R1,36H MOV R0,SBUFMOV Ri,#data ;(Ri)data 如:如:MOV R1,#48 MOV R0,#0D6H30不允许的操作有:
28、不允许的操作有:RiRiRnRnRiRn注意:注意:MOVRn,RnxMOVRi,RixMOVRn,RixMOV#data,Ax等等指令是非法指令。等等指令是非法指令。MOV指令在片内指令在片内RAM的允许操作图的允许操作图31十六位数据传送指令(十六位数据传送指令(1条)条)MOV DPTR,#data16 ;(DPH)dataH8,(DPL)dataL8 如:如:MOV DPTR,#2368H MOV DPH,#23H MOV DPL,#68H MOV DPTR,#3532632举例:设内部举例:设内部RAM40H单元的内容为单元的内容为30H,30H单元的内容单元的内容为为20H,20H
29、单元的内容为单元的内容为10H,端口端口P1的内容为的内容为AAH,试试问结果如何?问结果如何?MOV R0,#40HMOV A,R0MOV R1,AMOV B,R1MOV R1,P1MOV P2,P1MOV 40H,#10H问:问:R0=?R1=?B=?(40H)=?(30H)=?P2=?(20H)=?;A=30H;R1=30H;B=20H;(30H)=AAH;P2=AAH;(40H)=10H改为改为MOV R0,40H;A=20H;R1=20H;B=10H;(20H)=AAH;P2=AAH;(40H)=10H33程序存储器数据传送指令(查表指令)(程序存储器数据传送指令(查表指令)(2条)
30、条)MOVC A,A+DPTR ;A(A)+(DPTR)一般一般DPTR放表的首地址,放表的首地址,A放所查数据在表中的偏移;查放所查数据在表中的偏移;查表范围为表范围为64KB空间,称为远程查表。空间,称为远程查表。MOVC A,A+PC ;A(A)+(PC)PC的值为下条指令的地址的值为下条指令的地址,A放所查数据相对放所查数据相对PC值的偏移;值的偏移;查表范围为最大为查表范围为最大为256B空间,称为近程查表。空间,称为近程查表。注意:内外程序存储器在逻辑上连续统一,传送单向,只读。注意:内外程序存储器在逻辑上连续统一,传送单向,只读。这类指令用于访问程序存储器中的数据表格。这类指令用
31、于访问程序存储器中的数据表格。34例例1:近程查表近程查表地址地址标号标号语句语句2000HBA:INCA;A=(00H-0FH)2001MOVCA,A+PC;查表查表2002RETTAB:DB30H;0的的ASC码码DB31H;1的的ASC码码。DB39H;9的的ASC码码DB41H;A的的ASC码码。DB46H;F的的ASC码码例如例如A初值初值01H,查表得查表得31H;A初值初值0FH,查表得查表得46H35例例2 远程查表远程查表设程序中的数据表格为:设程序中的数据表格为:执行程序:执行程序:1000H:MOV A,#10H1002H:PUSH DPH1004H:PUSH DPL10
32、06H:MOV DPTR,#7000H1009H:MOVC A,A+DPTR ;100AH:POP DPH100CH:POP DPL 结果为:(结果为:(A)=,(PC)=,(DPTR)=7010H:02H 7011H:04H7012H:06H7013H:08H02H 100EH 原值高低字节互换原值高低字节互换A(10H+7000H)36累加器累加器A与片外与片外RAM的数据传送指令(的数据传送指令(4条)条)用间址方式用间址方式MOVX A,Ri ;A(Ri),且使且使/RD=0MOVX A,DPTR ;A(DPTR),且使且使/RD=0MOVX Ri,A ;(Ri)(A),且使且使/WR
33、=0MOVX DPTR,A ;(DPTR)(A),且使且使/WR=0注意:注意:1、外部数据的传送只能使用、外部数据的传送只能使用A2、DPTR两条指令以两条指令以DPTR为片外为片外RAM16位地址指针,寻址范围为位地址指针,寻址范围为64KB空间;空间;P2输出高输出高8位地址,位地址,P0口输出低口输出低8位地址和数据位地址和数据,分时复用分时复用3、Ri两条指令以两条指令以R0或或R1作低作低8位地址指针,由位地址指针,由P0口送出,寻址范围为口送出,寻址范围为256B空间(空间(P2口仍可作通用口仍可作通用I/O口)。口)。37例:将外部例:将外部RAM中中F5H单元中的内容送到单元
34、中的内容送到0645H单元中单元中 MOV DPTR,#0645HMOV R0,#0F5HMOVXA,R0MOVXDPTR,AMOV R0,#0F5HMOVX A,R0例:将外部例:将外部RAM中中0F5H单元中的内容送到单元中的内容送到A单元中。单元中。38交换指令(交换指令(5条)条)1、字节交换指令、字节交换指令XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)(Ri)2、半字节交换指令、半字节交换指令(1)低半字节交换指令)低半字节交换指令XCHD A,Ri ;(A)0 3 (Ri)03将将A的低的低4位与位与Ri间址单元的低
35、间址单元的低4位内容交换,高位内容交换,高4位不变。位不变。39如:设如:设(A)=36H,(R1)=65H,(65H)=42H XCHD A,R1 ;(A)=32H,(65H)=46H(2)累加器)累加器A高、低半字节交换指令高、低半字节交换指令SWAP A ;(A)03(A)47 如:设(如:设(A)=36H SWAP A ;(;(A)=63H40堆栈操作指令(堆栈操作指令(2条)条)进栈:进栈:PUSH direct ;先先(SP)+1SP,后后(direct)(SP)出栈:出栈:POP direct ;先先(SP)direct,后,后(SP)1SP如:如:PUSH 0E0H ;实际是实
36、际是(SP)+1SP,(A)(SP)POP 05H ;实际是实际是(SP)R5,(SP)1SP注意:注意:其操作数为直接地址,不能用寄存器名。其操作数为直接地址,不能用寄存器名。POP ACC 正确正确POP A 错误错误41例、进入中断服务程序,要将例、进入中断服务程序,要将DPTR、PSW和和A的内容保护起的内容保护起来。设来。设DPTR0123H,PSW25H,A=10H,当前当前SP=30H,问执行下列入栈后结果如何?问执行下列入栈后结果如何?PUSH DPL;SP=31H,(,(31H)23HPUSH DPH;SP=(32H)PUSH PSW;SP=(33H)PUSH ACC;SP=
37、(34H)POP DPL;DPL10H,SP33H。POP DPH;DPH SP POP PSW;PSW SP POP ACC;ACC SP32H01H31H25H34H10H25H32H01H33H23H30H42三、算术运算指令三、算术运算指令 共共24条条指令,分成七个小类指令,分成七个小类 不带进位加法指令(不带进位加法指令(4条)条)带进位加法指令(带进位加法指令(4条)条)带借位减法指令(带借位减法指令(4条)条)加加1指令(指令(5条)条)减减1指令(指令(4条)条)乘除法指令(乘除法指令(2条)条)进制数调整指令(进制数调整指令(1条)条)主要是对主要是对8位无符号数位无符号数
38、进行算术运算。算术运进行算术运算。算术运算结果将影响算结果将影响PSW的有的有关位。关位。43、不带进位加法指令(、不带进位加法指令(4条)条)ADDA,Rn;(A)(A)+(Rn)ADDA,direct;(A)(A)+(direct)ADDA,Ri;(A)(A)+(Ri)ADDA,#data;(A)(A)+#data注意:如果位注意:如果位3有进位,则半进位标志位有进位,则半进位标志位AC置置1,否则清零。,否则清零。如果位如果位7有进位,则进位标志位有进位,则进位标志位CY置置1,否则清零。,否则清零。如果两个数(看作有符号数时)相加溢出,则如果两个数(看作有符号数时)相加溢出,则OV置置
39、1,否则,否则清零。清零。如果两个同符号数相加的结果变号即溢出,则如果两个同符号数相加的结果变号即溢出,则OV置置1,否则,否则清零。清零。44例例:(A)=0C3H,(,(R0)=0AAH执行执行“ADD A,R0”的和为的和为6DH,标志位标志位CY=,OV=,AC=,P=。OV=C7 C6 对第对第6、第、第7位的进位位位的进位位C7、C6异或。异或。例例:(A)=0BAH,(,(R0)=88H执行执行“ADD A,R0”的和为的和为42H,标志位标志位CY=,OV=,AC=,P=。OV=C7 C6 对第对第6、第、第7位的进位位位的进位位C7、C6异或。异或。1 1 0 11 1 1
40、0两个同符号数相加的结果变号,则两个同符号数相加的结果变号,则OV置置1,否则清零。,否则清零。45带进位加法指令(带进位加法指令(4条)条)ADDC A,Rn ;(A)(A)+(Rn)+CYADDC A,direct ;(A)(A)+(direct)+CYADDC A,Ri ;(A)(A)+(Ri)+CY ADDC A,#data ;(A)(A)+#data+CY C为来自为来自PSW状态寄存器中的进位位状态寄存器中的进位位C。把源操作数指出的内容和进位标志把源操作数指出的内容和进位标志CY都同累加器都同累加器A的的内容相加,结果放于内容相加,结果放于A中。多用于多字节数的加法。中。多用于多
41、字节数的加法。46例:例:两个两个16位无符号数相加。设被加数在内部位无符号数相加。设被加数在内部RAM中中30H(低位低位)、31H中中,加,加数存放在内部数存放在内部RAM中中40H(低位低位)、41H单元单元中,将相加的结果存放到中,将相加的结果存放到30H、31H和和32H单元单元中。中。MOV R0,#30H;被加数低被加数低8位地址位地址MOV R1,#40H;加数低加数低8位地址位地址CLRC;清;清CYMOVA,R0;取被加数低取被加数低8位位ADD A,R1;与加数低与加数低8位相加位相加MOVR0,A;和存入和存入30H单元单元 INCR0;指向高指向高8位地址位地址INC
42、 R1 MOVA,R0;取被加数高取被加数高8位位ADDC A,R1;与加数高与加数高8位及进位位相加位及进位位相加MOVR0,A;结果存入结果存入31H单元单元CLR A;清;清AADDC A,#00H;处理进位处理进位INC R0;MOVR0,A;进位存入进位存入32H47、带借位减法指令(、带借位减法指令(4条)条)SUBB A,Rn ;(A)(A)-CY-(Rn)SUBB A,direct ;(A)(A)-CY-(direct)SUBB A,Ri ;(A)(A)-CY-(Ri)SUBB A,#data ;(A)(A)-CY-#data 注意:注意:如果位如果位3有借位,则半进位标志位有
43、借位,则半进位标志位AC置置1,否则清零。,否则清零。如果位如果位7有借位,则进位标志位有借位,则进位标志位CY置置1,否则清零。,否则清零。如果两个数(看作有符号数时)相减溢出,则如果两个数(看作有符号数时)相减溢出,则OV置置1,否则清零。,否则清零。如果两个异号数相减的结果与被减数符号不同即溢出,如果两个异号数相减的结果与被减数符号不同即溢出,OV置置1,否则清零。,否则清零。无不带借位减法指令,需要时,先执行一条无不带借位减法指令,需要时,先执行一条CLR C指令既可。指令既可。例例:(A)=0D1H,(R0)=54H (CY)=1 执行执行“SUBB A,R0”的的结果为结果为 ,标
44、志位标志位CY=,OV=,AC=,P=。7CH 0 1 1 1 48、加、加1指令(指令(5条)条)INC A ;(A)(A)+1INC Rn ;(Rn)(Rn)+1INC direct ;(direct)(direct)+1INC Ri ;(Ri)(Ri)+1INC DPTR ;(DPTR)(DPTR)+1说明说明:INC A 影响影响P外,外,不影响不影响PSW其它位其它位(即标即标志位志位CY、AC、OV)。例:例:MOV A,#0FEH ;P=1 INC A;P=049、减减1指令(指令(4条)条)DEC A ;(A)(A)-1DEC Rn ;(Rn)(Rn)-1DEC direct
45、;(direct)(direct)-1DEC Ri ;(Ri)(Ri)-1DEC DPTR ;无此指令无此指令说明说明:DEC A 影响影响P外,外,不影响不影响PSW其它位其它位(即即标志位标志位CY、AC、OV)。例:例:MOV A,#0FFH ;P=0 DEC A;P=150、乘除法指令(、乘除法指令(2条,单字节四周期指令)条,单字节四周期指令)1、乘法指令、乘法指令 MUL AB ;(A)x(B)B158,A70说明说明:(:(1)为无符号乘法;)为无符号乘法;(2)若结果的)若结果的B0(乘积大于乘积大于255),则,则OV=1,若,若B=0,则,则OV=0;CY总是清零,总是清零
46、,AC不影响,不影响,P影响。影响。2、除法指令除法指令 DIV AB ;(A)/(B)的商的商A,余数余数B说明说明:(:(1)为无符号除法;)为无符号除法;(2)若除数)若除数B=0(除法无意义)除法无意义),则,则OV=1,若,若B 0,则,则OV=0;CY总是清零,总是清零,AC不影响,不影响,P影响。影响。51、十进制数调整指令(、十进制数调整指令(1条)条)DA A ;调整累加器内容为调整累加器内容为BCD码码(二进制编码的十进制二进制编码的十进制)说明说明:(1)此指令)此指令跟在跟在ADD或或ADDC指令之后指令之后,将,将A中的和调整为中的和调整为BCD码,码,并且并且ADD
47、或或ADDC的两个操作数是的两个操作数是BCD码码,即两个,即两个BCD码相加必须经过码相加必须经过DA A指指令后,才能得到正确的令后,才能得到正确的BCD码的结果。码的结果。(2)调整方法:)调整方法:若若(A03)9或或AC=1,则,则(A03)+6(A03);若若(A47)9或或CY=1,则,则(A47)+6(A47);若若(A47)9且且(A03)9,则,则(A)66H (A);52二二-十进制编码十进制编码BCD码码例:求十进制数例:求十进制数876876的的BCDBCD码码876876BCD BCD =1000 0111 0110=1000 0111 0110 876=36C87
48、6=36CH H=0011 0110 1100=0011 0110 1100B BBCDBCD码码(Binary Coded Decimal)Binary Coded Decimal)二进制代码表示的十进制数。二进制代码表示的十进制数。8421 BCD8421 BCD码码53BCDBCD码运算码运算十进制调整:十进制调整:计算机实际按二进制法则计算,加入计算机实际按二进制法则计算,加入 十进制调整操作,可计算十进制调整操作,可计算BCDBCD码。码。例:例:计算计算BCDBCD码码 56+67=56+67=?0101 01100101 0110 56 56BCDBCD +0110 011101
49、10 0111 +67+67BCDBCD 1011 11011011 1101 产生非产生非BCDBCD码和半进位码和半进位 +0110+0110 01100110 +66H+66H调整调整1 0010 00111 0010 0011 带进位结果:带进位结果:123123 54执行执行DA A后,后,CPU根据累加器的值,以及根据累加器的值,以及AC、CY的状态,来自动的状态,来自动的对的对A进行修正,不需人为的干预。进行修正,不需人为的干预。注意:注意:1、DA指令不对减法进行修正指令不对减法进行修正例:例:MOV A,#16 ADD A,#16 DA A A=?MOV A,#56H ADD
50、 A,#67H DA A A=?CY=?20H23H155四、逻辑运算指令四、逻辑运算指令 包括与、或、异或、清除、求反、移位等操作。这类指令一般不影响包括与、或、异或、清除、求反、移位等操作。这类指令一般不影响标志位标志位CY、AC和和OV。共共24条条指令,分成五个小类。指令,分成五个小类。、逻辑、逻辑“与与”指令(指令(6条)条)、逻辑、逻辑“或或”指令(指令(6条)条)、逻辑、逻辑“异或异或”指令(指令(6条)条)、累加器、累加器A清清0与取反指令(与取反指令(2条)条)、移位指令(、移位指令(4条)条)逻辑运算是按位进行的;逻辑运算是按位进行的;当需要只改变字节数据的某当需要只改变字