《MCS-51系列单片机的指令系统.ppt》由会员分享,可在线阅读,更多相关《MCS-51系列单片机的指令系统.ppt(91页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机技术第第3章章 MCS-51系列单片机的系列单片机的指令系统指令系统v3.1 3.1 指令系统简介指令系统简介v3.2 3.2 寻址方式寻址方式v3.3 3.3 数据传送类指令数据传送类指令v3.4 3.4 算术运算类指令算术运算类指令v3.5 3.5 逻辑运算及移位类指令逻辑运算及移位类指令v3.6 3.6 控制转移类指令控制转移类指令v3.7 3.7 位操作类指令位操作类指令1单片机技术31 指令系统概述指令系统概述 指指令令是是规规定定计计算算机机进进行行某某种种操操作作的的命命令令。一一台台计计算算机机所所能能执执行行的的指指令令集集合合称称为为该该计计算算机机的的指指令令系统。
2、系统。v311 指令概述 计计算算机机内内部部只只识识别别二二进进制制数数。因因此此,能能被被计计算算机机直直接接识识别别、执执行行的的指指令令是是使使用用二二进进制制编编码码表表示示的的指令指令,这种指令被,这种指令被称为机器语言指令称为机器语言指令。MCS-51系系列列单单片片机机指指令令系系统统共共有有111条条指指令令,按功能划分,可分为五大类:按功能划分,可分为五大类:1)数据传送类指令()数据传送类指令(29条);条);2)算术运算类指令()算术运算类指令(24条);条);3)逻辑运算及移位类指令()逻辑运算及移位类指令(24条);条);4)控制转移类指令()控制转移类指令(17条
3、);条);5)位操作类指令()位操作类指令(17条)。条)。2单片机技术312 指令格式指令格式v一条完整的指令格式如下:一条完整的指令格式如下:v标号:标号:操作码操作码 操作数操作数 ;注释;注释v标标号号标标号号是是该该指指令令的的起起始始地地址址,是是一一种种符符号号地地址址。v标标号号可可以以由由18个个字字符符组组成成,第第一一个个字字符符必必须须是是字字母母,其其余余字字符符可可以以是是字字母母、数数字字或或其其他他特特定定符符号。标号后跟分界符号。标号后跟分界符“:”。v操操作作码码指指令令的的助助记记符符。它它规规定定了了指指令令所所能能完完成成的操作功能。的操作功能。v操操
4、作作数数指指出出了了指指令令的的操操作作对对象象。操操作作数数可可以以是是一一个个具具体体的的数数据据,也也可可以以是是存存放放数数据据的的单单元元地地址址,还可以是符号常量或符号地址等。还可以是符号常量或符号地址等。v多个操作数之间用逗号多个操作数之间用逗号“,”分隔。分隔。注注释释为为了了方方便便阅阅读读而而添添加加的的解解释释说说明明性性的的文文字字,用用“;”开头。开头。3单片机技术v313 指令中常用符号说明指令中常用符号说明 Rn 当当前前选选中中的的工工作作寄寄存存器器组组中中的的寄寄存存器器R0R7之一,之一,所以所以n=07。vRi 当当前前选选中中的的工工作作寄寄存存器器组
5、组中中可可作作地地址址指指针针的的寄存器寄存器R0、R1,所以,所以i=0、1。v#data 8位立即数。位立即数。v#data16 16位立即数。位立即数。vdirect 内内部部RAM的的8位位地地址址。即即可可以以是是内内部部RAM的的低低128个个单单元元地地址址,也也可可以以是是特特殊殊功功能能寄寄存存器器的的单单元元地地址址或或符符号号。在在指指令令中中direct表表示示直直接寻址方式。接寻址方式。vaddr11 11位位目目的的地地址址,只只限限于于在在ACALL和和AJMP 指令中使用。指令中使用。vaddr16 16位位目目的的地地址址,只只限限于于在在LCALL和和LJM
6、P 指令中使用。指令中使用。4单片机技术 rel补补码码形形式式表表示示的的8位位地地址址偏偏移移量量,在在相相对对转转移移指指令中使用。令中使用。vbit 表表示示片片内内RAM位位寻寻址址区区或或可可位位寻寻址址的的特特殊殊功功能能寄存器的位地址;寄存器的位地址;v 间接寻址方式中间址寄存器的前缀标志;间接寻址方式中间址寄存器的前缀标志;vC 进进位位标标志志位位,它它是是布布尔尔处处理理机机的的累累加加器器,也也称称之为位累加器;之为位累加器;v/加加在在位位地地址址的的前前面面,表表示示对对该该位位先先求求反反再再参参与与操操作,但不影响该位的值;作,但不影响该位的值;v(x)由由x指
7、定的寄存器或地址单元中的内容;指定的寄存器或地址单元中的内容;v(x)由由x所所指指寄寄存存器器的的内内容容作作为为地地址址的的存存储储单元的内容;单元的内容;v$表示本条指令的起始地址;表示本条指令的起始地址;v 表表示示指指令令操操作作流流程程,将将箭箭头头右右边边的的内内容容送送到到箭箭头左边的单元中。头左边的单元中。5单片机技术32 寻址方式寻址方式v寻寻址址就就是是寻寻找找操操作作数数的的地地址址,寻寻址址方方式式则则指指出出寻寻找找操作数地址的方式方法。操作数地址的方式方法。MCS-51系列单片机提供了七种寻址方式。系列单片机提供了七种寻址方式。v 321 立即寻址立即寻址v所所谓
8、谓立立即即寻寻址址就就是是在在指指令令中中直直接接给给出出操操作作数数。通通常常把把出出现现在在指指令令中中的的操操作作数数称称为为立立即即数数。为为了了与与直直接接寻寻址址指指令令中中的的直直接接地地址址相相区区别别,在在立立即即数数前前面面加加“#”标志。例如:标志。例如:v MOV A,#3AHv其其中中3AH就就是是立立即即数数,该该指指令令功功能能是是将将3AH这这个个数数本身送入累加器本身送入累加器A中。中。6单片机技术v322 直接寻址直接寻址v在在指指令令中中直直接接给给出出操操作作数数地地址址,这这就就是是直直接接寻寻址址方方式。例如:式。例如:vMOV A,3AHv其中其中
9、3AH就是表示直接地址,就是表示直接地址,其操作示意图如图其操作示意图如图3-1所示,所示,直接寻址方式可访问以下直接寻址方式可访问以下 存储空间:存储空间:v内部内部RAM低低128个字节单元。个字节单元。v特殊功能寄存器。特殊功能寄存器。应注意:应注意:直接寻址是访问特殊功能直接寻址是访问特殊功能寄存器的唯一方法。寄存器的唯一方法。7单片机技术v323 寄存器寻址寄存器寻址v寄寄存存器器寻寻址址即即寄寄存存器器的的内内容容就就是是操操作作数数。因因此此在在指指令令的的操操作作数数位位置置上上指指定定了了寄寄存存器器就就能能得得到到操操作作数数。MOV A,R0vMOV R2,A 前一条指令
10、是将前一条指令是将R0寄存器的内容送到累加器寄存器的内容送到累加器A中。中。后一条是把累加器后一条是把累加器A中的内容传送到中的内容传送到R2寄存器中。寄存器中。v采采用用寄寄存存器器寻寻址址方方式式的的指指令令都都是是一一字字节节的的指指令令,可可以以作作寄寄存存器器寻寻址址的的寄寄存存器器有有:R0R7、A、AB寄寄存存器器对和数据指针对和数据指针DPTR8单片机技术v324 寄存器间接寻址寄存器间接寻址v所所谓谓寄寄存存器器间间接接寻寻址址就就是是以以寄寄存存器器中中的的内内容容作作为为RAM地址,该地址中的内容才是操作数。地址,该地址中的内容才是操作数。v寄存器前加寄存器前加“”标志,
11、表示间接寻址。标志,表示间接寻址。v例如:例如:MOV A,R0v其操作示意图如图其操作示意图如图3-2所示。所示。v 此时此时R0寄存器的内容寄存器的内容3AHv是操作数地址,内部是操作数地址,内部RAM的的v3AH单元的内容单元的内容65H才是操才是操v作数,把该操作数传送到作数,把该操作数传送到v累加器累加器A中,结果中,结果A=65H。9单片机技术 能用于间接寻址的寄存器有能用于间接寻址的寄存器有R0R0,R1R1,DPTRDPTR。其。其中中R0R0、R1R1必须是工作寄存器组中的寄存器。必须是工作寄存器组中的寄存器。间接寻址可以访问的存储器空间包括内部间接寻址可以访问的存储器空间包
12、括内部RAM和外部和外部RAM。内部内部RAM的低的低128个单元采用个单元采用R0、R1作为作为间址寄存器间址寄存器 外部外部RAM:一是采用:一是采用R0、R1作为间址寄作为间址寄存器,可寻址存器,可寻址256个单元。二是采用个单元。二是采用16位的位的DPTR作为间址寄存器,可寻址外部作为间址寄存器,可寻址外部RAM的整个的整个64KB地址空间。地址空间。10单片机技术例如:例如:MOV R0,A;内部;内部RAM(R0)A (a)(b)MOVX DPTR,A;外部;外部RAM(DPTR)A其指令操作过程示意图如上图(其指令操作过程示意图如上图(b)所示)所示。其指令操作过程示意图如下图
13、(其指令操作过程示意图如下图(a a)所示。)所示。片外片外RAM2000HDPTR30HA2000H30H片内片内RAM30HR034HA30H34H11单片机技术v对对于于5252子子系系列列的的单单片片机机,其其内内部部RAMRAM是是256256个个字字节节,其其高高128128字字节节地地址址与与特特殊殊功功能能寄寄存存器器的的地地址址是是重重叠叠的。的。v在在使使用用上上,对对5252子子系系列列的的高高128B 128B RAMRAM,必必须须采采用用寄寄存存器器间间接接寻寻址址方方式式访访问问,对对特特殊殊功功能能寄寄存存器器则则必必须采用直接寻址方式访问。须采用直接寻址方式访
14、问。v325 变址寻址变址寻址v变变址址寻寻址址是是以以DPTR或或PC作作基基址址寄寄存存器器,以以累累加加器器A作作变变址址寄寄存存器器,并并以以二二者者内内容容相相加加形形成成的的16位位地址作为操作数地址(地址作为操作数地址(ROM中地址)。中地址)。v例如:例如:vMOVC A,A+DPTR;A(A)+DPTR)MOVC A,A+PC ;A(A)+(PC)12单片机技术v第一条指令的功能第一条指令的功能将将A的内容与的内容与DPTR的的内容之和作为操作数内容之和作为操作数地址,把该地址中的地址,把该地址中的内容送入累加器内容送入累加器A中,中,如图如图3-3所示。所示。第二条指令的功
15、能第二条指令的功能将将A的内容与的内容与PC的内的内容之和作为操作数地容之和作为操作数地址,把该地址中的内址,把该地址中的内容送入累加器容送入累加器A中。中。v这这两两条条指指令令常常用用于于访访问问程程序序存存储储器器中中的的数数据据表表格格。且都为一字节指令。且都为一字节指令。13单片机技术v326 相对寻址相对寻址v相相对对寻寻址址即即将将程程序序计计数数器器PC的的当当前前值值与与指指令令中中给给出出的的偏偏移移量量rel相相加加,其其结结果果作作为为转转移移地地址址送送入入PC中中。相相对对寻寻址址能能修修改改PC的的值值,故故可可用用来来实实现现程序的分支转移。程序的分支转移。PC
16、当前值是指正在执行指令当前值是指正在执行指令的下一条指令的地址。的下一条指令的地址。rel是一个带符号的是一个带符号的8位二进位二进制数,取值范围制数,取值范围-128+127。2000H:SJMP 54H这是无条件相对转移指令,这是无条件相对转移指令,双字节指令,指令代码双字节指令,指令代码80H、54H;其中;其中54H是偏移量。是偏移量。14单片机技术v327 位寻址位寻址v在在指指令令的的操操作作数数位位置置上上直直接接给给出出位位地地址址,这这种种寻寻址址方方式式称称为为位位寻寻址址。MCS-51系系列列单单片片机机的的特特色色之之一一是是具具有有位位处处理理功功能能,可可对对寻寻址
17、址的的位位单单独独进进行行各种操作。各种操作。v例如:例如:MOV C,30Hv该该指指令令的的功功能能是是把把位位地地址址30H中中的的值值(0或或1)传传送到位累加器送到位累加器CY中。中。v51系系列列单单片片机机的的内内部部RAM有有两两个个区区域域可可以以位位寻寻址址:一一个个是是位位寻寻址址区区20H2FH单单元元的的128位位,另另一一个个是是字字节节地地址址能能被被8整整除除的的特特殊殊功功能能寄寄存存器器的相应位的相应位。15单片机技术v在在MCS-51系系列列单单片片机机中中,位位地地址址有有以以下下几几种种表表示方式示方式:v(1)直直接接使使用用位位地地址址。对对于于2
18、0H2FH共共16个个单单元元的的128位位,其其位位地地址址编编号号是是00H7FH,例例如,如,20H单元的单元的07位的位地址为位的位地址为00H7H。v(2)用用单单元元地地址址加加位位序序号号表表示示。如如25H.5表表示示25H单单元元的的D5位位(位位地地址址是是2DH),而而PSW中中的的D3可可表表示示为为D0H.3。这这种种表表示示方方法法可可以以避避免免查查表或计算,比较方便。表或计算,比较方便。v(3)用用位位名名称称表表示示。特特殊殊功功能能寄寄存存器器中中的的可可寻寻址址位位均均有有位位名名称称,可可以以用用位位名名称称来来表表示示该该位位。如如可用可用RS0表示表
19、示PSW中的中的D3位:位:D0H.3v(4)对对特特殊殊功功能能寄寄存存器器可可直直接接用用寄寄存存器器符符号号加加位位序序号号表表示示。如如PSW中中的的D3位位,又又可可表表示示为为PSW.3。16单片机技术例题:例题:v1、(20H)=11HvMOV A,20H MOV C,07HvA=11H Cy=0v2、(20H)=11H,(24H)=7FHvMOV A,20H MOV C,20H;vA=11H;Cy=1v3、(30H)=1AHvMOV A,#30H;A=30HvMOV A,30H;A=1AH17单片机技术v数数据据传传送送类类指指令令的的功功能能是是把把源源操操作作数数传传送送到
20、到目目的的操操作作数数,源源操操作作数数不不变变,目目的的操操作作数数被被源源操操作作数数所所代代替替。v331 内部内部RAM数据传送指令数据传送指令 内内部部RAM的的数数据据传传送送类类指指令令是是指指累累加加器器、寄寄存存器器、特殊功能寄存器、特殊功能寄存器、RAM单元之间的数据相互传送。单元之间的数据相互传送。v1以累加器以累加器A为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV A,#data ;A data MOV A,direct ;A(direct)MOV A,Rn ;A(Rn)MOV A,Ri ;A ((Ri))这这组组指指令令的的功功能能是是将将源源操操作作数
21、数所所指指定定的的内内容容送送入入累加器累加器A中。中。33 数据传送类指令数据传送类指令18单片机技术v2以寄存器以寄存器Rn为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV Rn,A ;Rn(A)MOV Rn,#data ;Rn data MOV Rn,direct ;Rn(direct)这这组组指指令令的的功功能能是是将将源源操操作作数数所所指指定定的的内内容容送送到到当前工作寄存器组当前工作寄存器组R0R7中的某个寄存器中。中的某个寄存器中。注意:没有注意:没有“MOV Rn,Rn”指令,指令,也没有也没有“MOV Rn,Ri”指令指令。例例3-1 (A)=50H,(,(R
22、1)=10H,(,(R2)=20H,(R3)=30H,(,(30H)=4FH,执行下述指令:,执行下述指令:MOV R1,A ;R1 (A)MOV R2,30H ;R2(30H)MOV R3,#85H ;R3 85H 执行后:(执行后:(R1)=50H,(R2)=4FH,(R3)=85H。19单片机技术3以直接地址为目的操作数的数据传送指令以直接地址为目的操作数的数据传送指令 MOV direct,A ;direct (A)MOV direct,#data ;direct data MOV direct1,direct2 ;direct1(direct2)MOV direct,Rn ;dire
23、ct(Rn)MOV direct,Ri ;direct((Ri))v 这这组组指指令令的的功功能能是是将将源源操操作作数数所所指指定定的的内内容容送送入由直接地址入由直接地址direct所指定的片内存储单元。所指定的片内存储单元。v例例3-2 已知:(已知:(R0)=60H,(,(60H)=72H,MOV 40H,R0 ;(;(40H)(60H)指令执行过程如图指令执行过程如图3-5所示。所示。执行结果为:执行结果为:(40H)=72H20单片机技术4以间接地址以间接地址Ri为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV Ri,A ;(;(Ri)(A)MOV Ri,#data ;
24、(;(Ri)data MOV Ri,direct ;(;(Ri)(direct)这这组组指指令令的的功功能能是是把把源源操操作作数数所所指指定定的的内内容容送送入入以以R0或或R1为为地地址址指指针针的的片片内内RAM单单元元中中。源源操操作作数数可可采采用用寄寄存存器器寻寻址、立即寻址和直接寻址址、立即寻址和直接寻址3种方式。种方式。v 注意:没有注意:没有“MOV Ri,Rn”指令。指令。例例3-3 已知:(已知:(R1)=30H,(A)=20H,执行指令:,执行指令:MOV R1,A ;(;(30H)(A)执行结果为:(执行结果为:(30H)=20H。21单片机技术5以以DPTR为目的操
25、作数的数据传送指令为目的操作数的数据传送指令 MOV DPTR,#data16 ;DPTR data16v 这这是是MCS-51系系列列单单片片机机指指令令系系统统中中唯唯一一的的一一条条16位位立立即即数数传传送送指指令令,其其功功能能是是将将外外部部存存储储器器(RAM或或ROM)某某单单元元地地址址作作为为立立即即数数送送到到DPTR中中,立即数的高,立即数的高8位送位送DPH,低,低8位送位送DPL。在学习、使用上述各条指令时,在学习、使用上述各条指令时,需注意以下几点:需注意以下几点:(1)要区分各种寻址方式的含义,正确传送数据。)要区分各种寻址方式的含义,正确传送数据。(2)所所有
26、有传传送送指指令令都都不不影影响响标标志志位位。这这里里所所说说的的标标志志位位是是指指CY、AC、和和OV。涉涉及及到到累累加加器器A的的将将影响奇偶标志位影响奇偶标志位P。22单片机技术(3)估估算算指指令令的的字字节节数数:凡凡是是指指令令中中既既不不包包含含直直接接地地址址、又又不不包包含含8位位立立即即数数的的指指令令均均为为一一字字节节指指令令;若若指指令令中中包包含含一一个个直直接接地地址址或或8位位立立即即数数,则则指指令令字字节节数数为为2,若若包包含含两两个个这这样样的的操操作作数数,则则指指令令字字节数为节数为3。例例3-4 3-4 若(若(R0R0)=30H=30H,(
27、,(30H30H)=50H=50H,执行指令:,执行指令:MOV A,R0 ;(;(A)=30H (一字节)一字节)MOV A,30H ;(;(A)=50 H (二字节)二字节)MOV A,#30H ;(;(A)=30H (二字节)二字节)MOV 30H,#0FH;(;(30H)=0FH(三字节)三字节)MOV DPTR,#2000H;(DPH)=20H,(DPL)=00H (三字节三字节)23单片机技术v例例:(30H)=40H,(40H)=10H,(10H)=32H,v(P1)=EFHvMOV R0,#30HvMOV A,R0vMOV R1,AvMOV B,R1vMOV R1,P1vMOV
28、 P2,P1vMOV 10H,#20HvMOV 30H,10H24单片机技术v332 访问外部访问外部RAM的数据传送指令的数据传送指令vCPU与与外外部部RAM或或I/O口口进进行行数数据据传传送送,必必须须采采用用寄寄存存器器间间接接寻寻址址的的方方式式,并并通通过过累累加加器器A来来传传送送。这类指令共有四条:这类指令共有四条:MOVX A,DPTR ;A(DPTR)MOVX DPTR,A ;(;(DPTR)A MOVX A,Ri ;A(Ri)MOVX Ri,A ;(;(Ri)Av前前两两条条指指令令是是以以DPTR作作为为间间址址寄寄存存器器,DPTR是是16位位地地址址指指针针,因因
29、此此其其寻寻址址范范围围可可达达片片外外RAM 64KB空间。空间。v后后两两条条指指令令是是以以R0或或R1作作为为间间址址寄寄存存器器,R0或或R1是是8位位地地址址指指针针,因因此此其其寻寻址址范范围围仅仅限限于于外外部部RAM 256个字节单元。个字节单元。v该该组组指指令令的的功功能能:在在DPTR或或R0、R1所所指指定定的的外外部部RAM单元与累加器单元与累加器A之间传送数据。之间传送数据。25单片机技术v例例3-5 试试编编程程,将将片片外外RAM的的2000H单单元元内内容容送送入入片外片外RAM的的0200H单元中;单元中;解解:片片外外RAM与与片片外外RAM之之间间不不
30、能能直直接接传传送送数数据据,需需通通过过累累加加器器A传传送送,另另外外,当当片片外外RAM地地址址值值大大于于FFH时,需用时,需用DPTR作为间址寄存器。编程如下:作为间址寄存器。编程如下:MOV DPTR,#2000H;源数据地址送;源数据地址送DPTR MOVX A,DPTR ;从外部;从外部RAM中取数送中取数送A MOV DPTR,#0200H ;目的地址送;目的地址送DPTR MOVX DPTR,A ;A中内容送外部中内容送外部RAM 26单片机技术333 程序程序存储器向累加器存储器向累加器A传送数据指令传送数据指令 MOVC A,A+DPTR;A((A)+(DPTR))MO
31、VC A,A+PC ;A((A)+(PC))两两条条指指令令适适合合于于查查阅阅在在ROMROM中中建建立立的的数数据据表表格格,也也称称作作查查表表指指令令,实实现现的的功功能能完完全全相相同同,但但使使用用中中有有一点差异。一点差异。第第一一条条指指令令采采用用DPTRDPTR作作为为基基址址寄寄存存器器。使使用用前前可可将将1616位位地地址址送送入入DPTRDPTR中中,实实现现在在64KBROM64KBROM空空间间向向累累加加器器A A的的数数据据传传送送。数数据据表表格格可可存存放放在在64KBROM64KBROM的的任任意意位置,因此这条指令称为远程查表指令。位置,因此这条指令
32、称为远程查表指令。v第第二二条条指指令令是是以以PCPC作作为为基基址址寄寄存存器器。程程序序中中PCPC值值是是确确定定的的,为为下下一一条条指指令令的的地地址址,不不是是表表格格首首地地址址,使使基基址址与与实实际际要要读读取取的的数数据据表表格格首首地地址址不不一一致致,这这样样A+PCA+PC与与实实际际要要访访问问的的单单元元地地址址就就不不一一致致,因因此此,使用该指令之前要用一条使用该指令之前要用一条加法指令加法指令进行进行地址调整地址调整。27单片机技术v由由于于PC的的内内容容不不能能随随意意改改变变,所所以以只只能能借借助助于于A来来进进行行调调整整,即即通通过过对对累累加
33、加器器A加加一一个个数数,使使得得A+PC和所读和所读ROM单元地址一样。单元地址一样。v 例例3-6 若若在在外外部部ROM中中2000H单单元元存存放放(09)的的平平方方 值值0,1,4,9,81,要要求求根根据据累累加加器器A中中的的值值(09)来来查查找找所所对对应应的的平平方方值值,并并存存入入60H单元中。单元中。v解:解:用用DPTR作基址寄存器:作基址寄存器:MOV DPTR,#2000H;表格首地址送;表格首地址送DPTR MOVC A,A+DPTR ;根根据据表表格格首首地地址址及及A中中值值确定地确定地 址,取数送址,取数送A。MOV 60H,A ;存结果;存结果此处(
34、此处(A)+(DPTR)之和为所查平方值所存地址)之和为所查平方值所存地址。28单片机技术v 用用PC作为基址寄存器:作为基址寄存器:在在MOVC指令之前先用一条加法指令进行地址调整:指令之前先用一条加法指令进行地址调整:ADD A,#data ;(A)+data 作地址调整作地址调整 MOVC A,A+PC ;(A)+data+(PC)确确定定查查表地址,取数送表地址,取数送A。MOV 60H,A ;存结果存结果 RET 2000H:DB 0,1,4,9,16,25,36,81执执行行MOVCMOVC指指令令时时,PC已已指指向向下下一一条条指指令令地地址址,很很显显然然,PC的的内内容容不
35、不是是要要查查找找的的表表格格首首地地址址2000H,二二者者之之间间存存在在地地址址差差,这这个个地地址址差差就就是是MOVCMOVC下下边边的的指指令令与与数数据据表表格格首首地地址址之之间间,其其他他指指令令所所占占的的字字节节数数之之和。在本例中,和。在本例中,地址差是地址差是03,03,即即data=03Hdata=03H。29单片机技术v334 数据交换指令数据交换指令v 数数据据交交换换指指令令共共有有五五条条,可可完完成成累累加加器器和和内内部部RAM单元之间的整字节或半字节交换。单元之间的整字节或半字节交换。v1整字节交换指令整字节交换指令v 整整字字节节交交换换指指令令有有
36、三三条条,完完成成累累加加器器A与与内内部部RAM单元内容的整字节交换。单元内容的整字节交换。XCH A,Rn ;(A)(Rn)XCH A,direct ;(A)(direct)XCH A,Ri ;(A)((Ri))v2半字节交换指令半字节交换指令 XCHD A,Ri ;(A)30((Ri i))30 低半字节交换,高半字节不变。低半字节交换,高半字节不变。v3累加器高低半字节交换指令累加器高低半字节交换指令 v SWAP A ;(A)74(A)3030单片机技术v例例3-7 试试编编程程,将将外外部部RAM 1000H单单元元中中的的数数据据与内部与内部RAM 6AH单元中的数据相互交换。单
37、元中的数据相互交换。v解解:数数据据交交换换指指令令只只能能完完成成累累加加器器A和和内内部部RAM单单元元之之间间的的数数据据交交换换,要要完完成成外外部部RAM与与内内部部RAM之之间间的的数数据据交交换换,需需先先把把外外部部RAM中中的的数数据据取取到到A中,交换后再送回到外部中,交换后再送回到外部RAM中。编程如下。中。编程如下。MOV DPTR,#1000H;外部;外部RAM地址送地址送DPTR MOVX A,DPTR ;从外部;从外部RAM中取数送中取数送A XCH A,6AH ;A与与6AH地址中的内容交换地址中的内容交换 MOVX DPTR,A ;交换结果送外部;交换结果送外
38、部RAM31单片机技术v335 堆栈操作指令堆栈操作指令所所谓谓堆堆栈栈是是在在片片内内RAMRAM中中按按“先先进进后后出出,后后进进先先出出”原原则则设设置置的的专专用用存存储储区区。数数据据的的进进栈栈出出栈栈由由指指针针SPSP统统一一管管理理。可可实实现现对对数数据据或或断断点点地地址址的的保保护护,堆栈的操作有如下两条专用指令:堆栈的操作有如下两条专用指令:PUSH direct ;SP(SP)+1,(SP)(direct)POP direct ;direct(SP),SP(SP)-1v前前一一条条指指令令是是进进栈栈指指令令,其其功功能能是是先先将将栈栈指指针针SP的的内内容容加
39、加1,使使它它指指向向栈栈顶顶空空单单元元,然然后后将将直直接接地地址址direct单元的内容送入栈顶空单元。单元的内容送入栈顶空单元。v后后一一条条指指令令是是出出栈栈指指令令,其其功功能能是是将将SP所所指指的的单单元元内内容容送送入入直直接接地地址址所所指指出出的的单单元元中中,然然后后将将栈栈指针指针SP的内容减的内容减1,使之指向新的栈顶单元。,使之指向新的栈顶单元。v注注意意:进进栈栈、出出栈栈指指令令只只能能以以直直接接寻寻址址方方式式来来取取得得操操作作数数,不不能能用用累累加加器器或或工工作作寄寄存存器器Rn作作为为操操作作数。数。32单片机技术v例:设例:设(30H)=x,
40、(40H)=y,试利用堆栈指令,试利用堆栈指令编出编出30H和和40H单元中内容相交换的程序。单元中内容相交换的程序。vMOV SP,#70HvPUSH 30HvPUSH 40HvPOP 30HvPOP 40HvPUSH ACC vPUSH A33单片机技术v算算术术运运算算类类指指令令可可以以完完成成加加、减减、乘乘、除除等等各各种种操操作作,全全部部指指令令都都是是8位位数数运运算算指指令令。如如果果需需要要作作16位数的运算则需编写相应的程序来实现。位数的运算则需编写相应的程序来实现。v算算术术运运算算类类指指令令大大多多数数要要影影响响到到程程序序状状态态字字寄寄存存器器PSW中中的的
41、溢溢出出标标志志OV、进进位位(借借位位)标标志志CY、辅助进位标志辅助进位标志AC和奇偶标志位和奇偶标志位P。v341 加法指令加法指令 ADD A,#data ;A (A)+data ADD A,direct ;A (A)+(direct)ADD A,Rn ;A (A)+(Rn)ADD A,Ri ;A (A)+((Ri))34 算术运算类指令算术运算类指令34单片机技术v这这组组指指令令的的功功能能是是把把源源操操作作数数所所指指出出的的内内容容与与累累加加器器A的内容相加,其结果存放在的内容相加,其结果存放在A中中。v该组指令对该组指令对PSW中各标志位的影响情况如下:中各标志位的影响情
42、况如下:进位标志进位标志CY:如:如D7位向上有进位,则位向上有进位,则CY=1;否则否则CY=0。半进位标志半进位标志AC:如:如D3位向上有进位,位向上有进位,AC=1;否则否则AC=0。溢溢出出标标志志OV:若若D7、D6位位只只有有一一个个向向上上有有进进位位,OV=1;若若D7、D6同同时时有有进进位位或或同同时时无无进进位位时时,OV=0。奇奇偶偶标标志志P:当当A中中“1”的的个个数数为为奇奇数数时时,P=1;为为偶数时,偶数时,P=0。35单片机技术v例例3-8 设设A=94H,(,(30H)=8DH,v执行指令执行指令 ADD A,30H,操作如下:,操作如下:1 0 0 1
43、 0 1 0 0 +)1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0 1结果结果(A)=21H;(CY)=1;(AC)=1;(OV)=1;(P)=0参参加加运运算算的的两两个个数数,可可以以是是无无符符号号数数(0255),也可以是有符号数(也可以是有符号数(128+127)。)。v上上例例中中,若若把把94H、8DH看看作作无无符符号号数数相相加加,结结果果中中CY=1,表表示示运运算算结结果果发发生生了了溢溢出出(结结果果超超出出了了8位位),此此时时溢溢出出的的含含义义是是向向高高位位产产生生进进位位,所所以以确确定定结结果果时时不不能能只只看看累累加加器器A的的内内容容
44、,而而应应该该把把CY的的值值加加到到高高位位上上,才才可可得得到到正正确确的的结结果果。即即结结果果为为121H;若若把把94H、8DH看看作作有有符符号号数数(补补码码表表示示的的),结结果果中中OV=1,它它表表示示运运算算结结果果发发生生了了溢出,溢出,A中的值是个错误的结果。中的值是个错误的结果。36单片机技术v342 带进位加法指令带进位加法指令 ADDC A,#data ;A (A)+data+(CY)ADDC A,direct ;A (A)+(direct)+(CY)ADDC A,Rn ;A (A)+(Rn)+(CY)ADDC A,Ri ;A (A)+((Ri))+(CY)v这
45、这组组指指令令的的功功能能是是把把源源操操作作数数所所指指出出的的内内容容与与累累加加器器A的的内内容容相相加加、再再加加上上进进位位标标志志CY的的值值,其其结结果果存存放在放在A中中。v运算结果对运算结果对PSW标志位的影响与标志位的影响与ADD指令相同。指令相同。v需需要要说说明明的的是是,这这里里所所加加的的进进位位标标志志CY的的值值是是在在该该指指令令执执行行之之前前已已经经存存在在的的进进位位标标志志值值,而而不不是是执执行行该指令过程中产生的进位标志值。该指令过程中产生的进位标志值。37单片机技术例例3-9 设(设(A)=AEH,(,(R1)=81H,(,(CY)=1。执行指令
46、执行指令 ADDC A,R1,则操作如下:,则操作如下:1 0 1 0 1 1 1 0 1 0 0 0 0 0 0 1 +)1 (CY)1 0 0 1 1 0 0 0 0 结果(结果(A)=30H,(,(CY)=1,(,(OV)=1,(AC)=1,(,(P)=0v带带进进位位加加法法指指令令主主要要用用于于多多字字节节数数的的加加法法运运算算。因因低低位位字字节节相相加加时时可可能能产产生生进进位位,而而在在进进行行高高位位字字节节相相加加时时,要要考考虑虑低低位位字字节节向向高高位位字字节节的的进进位位,因因此此,在进行高位字节相加时必须使用带进位的加法指令。在进行高位字节相加时必须使用带进
47、位的加法指令。38单片机技术v例例3-10 设设有有两两个个无无符符号号16位位二二进进制制数数,分分别别存存放放在在30H、31H单单元元和和40H、41H单单元元中中(低低8位位先先存存),写写出出两两个个16位位数数的的加加法法程程序序,将将和和存存入入50H、51H单元。(设和不超过单元。(设和不超过16位)位)v解解:由由于于不不存存在在16位位数数的的加加法法指指令令,所所以以只只能能先先加加低低8位位,后后加加高高8位位,而而在在加加高高8位位时时要要连连低低8位相加的进位一起相加,编程如下:位相加的进位一起相加,编程如下:MOV A,30H ;取一个加数的低字节送;取一个加数的
48、低字节送A中中 ADD A,40H ;两个低字节数相加;两个低字节数相加 MOV 50H,A ;结果送;结果送50H单元单元 MOV A,31H ;取一个加数的高字节送;取一个加数的高字节送A中中 ADDC A,41H ;高高字字节节数数相相加加,同同时时加加低低字节产生的进位字节产生的进位 MOV 51H,A ;结果送;结果送51H单元单元 39单片机技术v343 带借位减法指令带借位减法指令 SUBB A,#data;A (A)-data-(CY)SUBB A,direct ;A (A)-(direct)-(CY)SUBB A,Rn ;A (A)(Rn)-(CY)SUBB A,Ri ;A
49、(A)-((Ri))-(CY)v减法指令对减法指令对PSW中各标志位的影响情况如下:中各标志位的影响情况如下:借位标志借位标志CY:如:如D7位向上需借位,则位向上需借位,则CY=1;否则;否则CY=0。半借位标志半借位标志AC:如:如D3位向上需借位,位向上需借位,AC=1;否则;否则AC=0。溢溢出出标标志志OV:若若D7、D6位位只只有有一一个个向向上上有有借借位位,OV=1;若若若若D7、D6位同时有借位或同时无借位时,位同时有借位或同时无借位时,OV=0。奇奇偶偶标标志志P:当当A中中“1”的的个个数数为为奇奇数数时时,P=1;为为偶偶数数时时,P=0。注注:减减法法运运算算只只有有
50、带带借借位位减减法法指指令令,而而没没有有不不带带借借位位的的减减法法指指令令。若若要要进进行行低低字字节节的的减减法法运运算算,应应该该先先用指令将用指令将CY清清0,然后再执行,然后再执行SUBB指令。指令。40单片机技术v例例3-11 设(设(A)=DBH,(,(R4)=73H,(,(CY)=1。执行指令执行指令 SUBB A,R4 则操作如下:则操作如下:1 1 0 1 1 0 1 1(DBH)1 1 0 1 1 0 1 1 0 1 1 1 0 0 1 1(73H)1 0 0 0 1 1 0 1(-73H补补码码))1(CY)+)1 1 1 1 1 1 1 1(-1补码补码)0 1 1