《单片机原理及应用C语言版3.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用C语言版3.ppt(150页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及应用C语言版3 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第3章章 MCS-51指令系统指令系统及汇编程序设计及汇编程序设计目目 录录3.1 汇编语言概述汇编语言概述 3.2 MCS-51单片机寻址方式单片机寻址方式3.3 MCS-51单片机指令系统单片机指令系统3.4 MCS-51单片机伪指令单片机伪指令3.5 汇编语言程序设计举例汇编语言程序设计举例 本章讨论本章讨论MCS-51单片机的指令系统及单片机的指令系统及汇编语言程序设计。汇编语言程
2、序设计。内容主要包括:内容主要包括:汇编语言基本概念、寻汇编语言基本概念、寻址方式、指令系统、伪指令、汇编语言程址方式、指令系统、伪指令、汇编语言程序举例。序举例。本章是单片机程序设计的基础本章是单片机程序设计的基础,即便是,即便是主要用主要用C语言做设计程序,但对某些要求较语言做设计程序,但对某些要求较高的部分,还是需要用汇编语言来写程序。高的部分,还是需要用汇编语言来写程序。3.1 汇编语言概述汇编语言概述 主要内容主要内容3.1.1 指令和机器语言指令和机器语言3.1.2 汇编语言汇编语言3.1.3 汇编语言指令格式汇编语言指令格式3.1.1 指令和机器语言指令和机器语言一、指令和指令系
3、统一、指令和指令系统指令:指令:是计算机中是计算机中CPU根据人的意图来根据人的意图来执行某种操作的命令。执行某种操作的命令。指令系统:指令系统:是一台计算机(是一台计算机(CPU)所能)所能执行的全部指令的集合。执行的全部指令的集合。指令系统的强弱,决定了计算机智能的指令系统的强弱,决定了计算机智能的高低。高低。3.1.1 指令和机器语言指令和机器语言二、程序和程序设计语言二、程序和程序设计语言程序:程序:人们编写的、使计算机完成某项人们编写的、使计算机完成某项工作的指令序列,称为程序。工作的指令序列,称为程序。程序设计:程序设计:编写程序的过程叫程序设计编写程序的过程叫程序设计程序设计语言
4、:程序设计语言:编写程序的一整套规则、编写程序的一整套规则、方法。方法。程序设计语言分类:程序设计语言分类:分为机器语言、汇分为机器语言、汇编语言和高级语言等。编语言和高级语言等。3.1.1 指令和机器语言指令和机器语言三、机器语言三、机器语言机器语言:机器语言:用二进制编码表示每条指令,用二进制编码表示每条指令,是计算机能够直接识别和执行的语言。是计算机能够直接识别和执行的语言。目标程序:目标程序:用机器语言编写的程序。用机器语言编写的程序。例如例如“13+25”,在,在MCS-51中的中的机器机器码为码为0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 10 0 1 0 0 1
5、0 0 0 0 0 1 1 0 0 1用十六进制表示指令码为:用十六进制表示指令码为:74H 0DH把把13放到累加器放到累加器A中中24H 19H A加加25,结果仍放回,结果仍放回A中中3.1.2 汇编语言汇编语言汇编语言:汇编语言:用助记符、符号、数字等表用助记符、符号、数字等表示指令的程序语言示指令的程序语言。例如,上面的例如,上面的“13+25”的例子可写成:的例子可写成:汇编语言程序汇编语言程序机器语言代码机器语言代码MOV A,#0DH74H 0DHADD A,#19H24H 19H相对于机器语言来说,汇编语言容易理相对于机器语言来说,汇编语言容易理解和记忆解和记忆。汇编语言和机
6、器语言都属于低级语言汇编语言和机器语言都属于低级语言。3.1.3 汇编语言指令格式汇编语言指令格式一、一、MCS-51汇编语言指令格式汇编语言指令格式由四部分组成由四部分组成,其一般格式如下:,其一般格式如下:标号:标号:操作码操作码 操作数操作数 ;注释;注释方括号中的内容可以没有,即可以没有方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。其标号、操作数和注释,至少要有操作码。其操作数部分最多可以是三项:操作数部分最多可以是三项:第第1操作数操作数 ,第第2操作数操作数 ,第第3操作数操作数对对MOV指令,有两项,第指令,有两项,第1操作数常称操作数常称为为目的操作数目
7、的操作数,第,第2操作数称为操作数称为源操作数源操作数。3.1.3 汇编语言指令格式汇编语言指令格式例如例如:START:MOVA,#23H;23H A“START”为标号为标号“MOV”为操作码为操作码“A,#23H”为操作数为操作数“23H A”为注释为注释 3.1.3 汇编语言指令格式汇编语言指令格式二、二、MCS-51汇编指令构成汇编指令构成1、单字节指令、单字节指令指令中既包含有操作码,也包含有操作指令中既包含有操作码,也包含有操作数,有两种情况。数,有两种情况。1)指令码中隐含着对某个寄存器的操作)指令码中隐含着对某个寄存器的操作如:如:“INC A”、“MUL AB”、“RL A
8、”、“CLR C”、“INC DPTR”等指令。等指令。2)由指令码中的)由指令码中的r r r或或i指定操作数指定操作数 3.1.3 汇编语言指令格式汇编语言指令格式这种情况是指令中使用了这种情况是指令中使用了Rn或或Ri如如“MOVRn,A”编码格式为:编码格式为:1 1 1 1 1 r r rrrr的取值为:的取值为:07,表示,表示R0R7又如又如“MOV A,Ri”编码格式为:编码格式为:1 1 1 0 0 1 1 ii取值为:取值为:0、1,表示,表示R0、R13.1.3 汇编语言指令格式汇编语言指令格式2、双字节指令、双字节指令一个字节表示操作码,另一个字节表示一个字节表示操作码
9、,另一个字节表示操作数或操作数的地址。操作数或操作数的地址。3、三字节指令、三字节指令一个字节表示操作码,另两个字节表示一个字节表示操作码,另两个字节表示操作数或操作数的地址。操作数或操作数的地址。3.2 MCS-51单片机寻址方式单片机寻址方式 主要内容主要内容3.2.1 立即数寻址立即数寻址3.2.2 寄存器寻址寄存器寻址3.2.3 直接寻址直接寻址3.2.4 寄存器间接寻址寄存器间接寻址3.2.5 变址寻址变址寻址3.2.6 位寻址位寻址3.2.7 指令寻址指令寻址3.2.8 寻址空间及指令中的符号寻址空间及指令中的符号 寻址方式:寻址方式:就是指就是指CPU寻找参与运算的寻找参与运算的
10、操作数的方式,或者寻找数据保存位置的操作数的方式,或者寻找数据保存位置的方式方式。7种寻址方式:种寻址方式:立即数寻址、寄存器寻立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。址、位寻址和指令寻址。寻址方式分两类:寻址方式分两类:操作数寻址和指令寻操作数寻址和指令寻址址,在,在7种寻址方式中,除了指令寻址之外,种寻址方式中,除了指令寻址之外,其余其余6种都属于操作数寻址。种都属于操作数寻址。寻址方式是汇编语言程序设计中最基本寻址方式是汇编语言程序设计中最基本的内容之一,必须要十分熟悉。的内容之一,必须要十分熟悉。3.2 MCS-
11、51单片机寻址方式单片机寻址方式 3.2.1 立即数寻址立即数寻址立即数寻址也叫立即寻址、常数寻址立即数寻址也叫立即寻址、常数寻址。其操作数就在指令中,是指令的一部分其操作数就在指令中,是指令的一部分,紧,紧跟在操作码后面,用跟在操作码后面,用“#”符号作前缀,以符号作前缀,以区别地址。例如:区别地址。例如:MOV A,#2CH;2CH A MOV A,2CH;(;(2CH)A前者表示把前者表示把2CH这个数送给累加器这个数送给累加器A,后,后者表示把片内者表示把片内RAM中地址为中地址为2CH单元的内单元的内容送给累加器容送给累加器A。3.2.1 立即数寻址立即数寻址立即数也可以是立即数也可
12、以是16位的位的,如:,如:MOVDPTR,#1234HMOVTL2,#2345HMOVRCAP2L,#3456H对于第对于第2条指令,立即数的低条指令,立即数的低8位送给了位送给了TL2,高,高8位送给了位送给了TH2;对于第;对于第3条指令,条指令,立即数的低立即数的低8位送给了位送给了RCAP2L,高,高8位送给位送给了了RCAP2H。3.2.2 寄存器寻址寄存器寻址寄存器寻址:寄存器寻址:就是由指令指出寄存器组就是由指令指出寄存器组R0R7中某一个或寄存器中某一个或寄存器A、B、DPTR和和C(位处理器的累加器)的内容作为操作数(位处理器的累加器)的内容作为操作数。例如:例如:MOVA
13、,R7;(;(R7)AMOV36H,A;(;(A)36HADDA,R0;(;(A)+(R0)A对于工作寄存器组的操作,必须要考虑对于工作寄存器组的操作,必须要考虑PSW中中RS1、RS0的值,确定当前使用的是的值,确定当前使用的是哪一组寄存器以及它们的实际地址。哪一组寄存器以及它们的实际地址。3.2.2 寄存器寻址寄存器寻址图图3-1 寄存器寻址方式(寄存器寻址方式(INC R3)程序存储器程序存储器片内片内RAM:+1PC00011011操作码操作码工作寄存器地址工作寄存器地址13H(R3)24H:00010r r r:PSWRS1 RS03.2.3 直接寻址直接寻址直接寻址:直接寻址:是指
14、操作存放在片内是指操作存放在片内RAM中,中,指令中给出操作数的地址指令中给出操作数的地址。例如。例如:MOVA,38H;(38H)A说明:说明:(1)直接寻址方式可以访问片内直接寻址方式可以访问片内RAM的低的低128字节和所有的特殊功能寄存器字节和所有的特殊功能寄存器。(2)直接寻址不能够访问片内直接寻址不能够访问片内RAM的高的高128字节,高字节,高128字节只能够间接访问字节只能够间接访问。对于特殊功能寄存器,既可以使用地址,对于特殊功能寄存器,既可以使用地址,也可以使用也可以使用SFR名。例如:名。例如:MOVA,P1 或或 MOVA,90H 3.2.4 寄存器间接寻址寄存器间接寻
15、址寄存器间接寻址:寄存器间接寻址:是指操作数存放在是指操作数存放在RAM中,指令中给出存放操作数地址的寄中,指令中给出存放操作数地址的寄存器,指令执行时,通过寄存器内的地址,存器,指令执行时,通过寄存器内的地址,间接地访问操作数间接地访问操作数。存放地址的寄存器称为间址寄存器存放地址的寄存器称为间址寄存器,在,在指令中,在指令中,在寄存器前面加前缀寄存器前面加前缀“”表示表示。MCS-51单片机规定,单片机规定,使用使用Ri(i=0、1,即指即指R0、R1)、)、SP和和DPTR作间址寄存器作间址寄存器。寄存器间接寻址有以下几种情况。寄存器间接寻址有以下几种情况。3.2.4 寄存器间接寻址寄存
16、器间接寻址一、使用一、使用Ri间接访问片内间接访问片内RAM间接访问的范围:间接访问的范围:256字节字节(包括低(包括低128字节和高字节和高128字节),字节),但不包括特殊功能寄但不包括特殊功能寄存器存器。例如:。例如:MOVA,Ri;(Ri)AMOVRi,A;(A)(Ri)(Ri):表示:表示Ri指向的单元,即单元的地址指向的单元,即单元的地址((Ri)):表示:表示Ri指向单元中的数据。指向单元中的数据。操作过程如图操作过程如图3-3所示。所示。3.2.4 寄存器间接寻址寄存器间接寻址对使用对使用SP间接访问片内间接访问片内RAM(在(在C语言语言中也可以访问片外中也可以访问片外RA
17、M),仅用在堆栈操仅用在堆栈操作中作中,见后面指令系统。,见后面指令系统。图图3-3 间接寻址间接寻址(MOV A,R0)示意图示意图 62HA:62H 98H 98HR0:片内片内RAM3.2.4 寄存器间接寻址寄存器间接寻址二、使用二、使用Ri间接访问片外间接访问片外RAM间接访问的范围:间接访问的范围:片外片外RAM的的64KB全空全空间间。其指令只有两条:。其指令只有两条:MOVXA,Ri ;(P2)(Ri)AMOVXRi,A ;(A)(P2 Ri)注意:注意:(1)P2中的值作为高中的值作为高8位地址,位地址,Ri中的值作为低中的值作为低8位地址位地址;(2)如果如果P2不改变,则范
18、围为不改变,则范围为256B;(3)这两条指令均为总线操作这两条指令均为总线操作,相应,相应总线信号有效(高低总线信号有效(高低8位地址、位地址、ALE、RD或或WR)。)。3.2.4 寄存器间接寻址寄存器间接寻址三、使用三、使用DPTR间接访问片外间接访问片外RAM间接访问的范围:间接访问的范围:片外片外RAM的的64KB全空全空间间。其指令也是只有两条:。其指令也是只有两条:MOVXA,DPTR;(DPTR)AMOVXDPTR,A;(A)(DPTR)DPTR为为16位地址。位地址。3.2.5 变址寻址变址寻址变址寻址:变址寻址:实为基址加变址的间接寻址实为基址加变址的间接寻址。指令中给出存
19、放基址和变址的寄存器。指令中给出存放基址和变址的寄存器。基地址寄存器:基地址寄存器:DPTR或或PC;变址寄存器:变址寄存器:累加器累加器A。也在地址寄存器前面加上前缀也在地址寄存器前面加上前缀“”。例如。例如:MOVCA,A+DPTR;(A)+(DPTR)A该指令的操作过程如图该指令的操作过程如图3-4所示。所示。3.2.5 变址寻址变址寻址ROM:DPTR 03E2H+0414H 38HA32H:A38H图图3-4 变址寻址示意图变址寻址示意图3.2.5 变址寻址变址寻址变址寻址的空间为程序存储器变址寻址的空间为程序存储器寻址范围:寻址范围:若若使用使用DPTR为基地址寄存器,寻为基地址寄
20、存器,寻址范围址范围为为64KB;若若使用使用PC为基地址寄存器,寻址为基地址寄存器,寻址空间在空间在PC之后之后256字节范围内字节范围内。变址寻址主要用于查表操作变址寻址主要用于查表操作 3.2.6 位寻址位寻址位寻址:位寻址:是指操作数是二进制位是指操作数是二进制位、位地址位地址位操作数地址范围:位操作数地址范围:片内片内RAM中中20H2FH,SFR中可以按位寻址的位中可以按位寻址的位。位地址在指令中用位地址在指令中用bit表示。例如:表示。例如:SETBbitMOVC,bit 3.2.6 位寻址位寻址位地址的位地址的4种表示方式:种表示方式:1)直接位地址)直接位地址(00HFFH)
21、。如。如32H2)字节地址带位号)字节地址带位号。如。如20H.1,表示,表示20H单元的第单元的第1位。位。3)特殊功能寄存器名带位号)特殊功能寄存器名带位号。如。如P1.7,表示表示P1口的第口的第7位。位。4)位符号地址)位符号地址。具体的:。具体的:SFR位名位名;用用“BIT”定义的位符号(如定义的位符号(如“flag BIT 01H”)。如)。如TR0、flag,TR0表示定时器表示定时器/计数器计数器0的运行控制位,的运行控制位,flag表示表示01H位。位。3.2.7 指令寻址指令寻址指令寻址:指令寻址:指令中的操作数给出转移的指令中的操作数给出转移的目标地址或目标地址的一部分
22、目标地址或目标地址的一部分。指令寻址分为绝对寻址和相对寻址指令寻址分为绝对寻址和相对寻址两种两种方式。方式。指令寻址用于控制转移指令中。指令寻址用于控制转移指令中。3.2.7 指令寻址指令寻址一、绝对寻址一、绝对寻址绝对寻址:绝对寻址:指令中的操作数给出转移的指令中的操作数给出转移的16位目标地址位目标地址。寻址范围:寻址范围:64KB全空间全空间。绝对寻址用在长转移和长调用指令中,绝对寻址用在长转移和长调用指令中,例如:例如:LJMPSER_INT_T1;无条件转移到;无条件转移到T1中断服务程序中断服务程序LCALLSUB_SORT;SUB_SORT调用排序子程序调用排序子程序SUB_SO
23、RT为为16位目标地址标号位目标地址标号SER_INT_T1为为16位目标地址标号位目标地址标号3.2.7 指令寻址指令寻址二、相对寻址二、相对寻址相对寻址:相对寻址:是以当前程序计数器是以当前程序计数器PC值为值为基地址,加上指令中给出的偏移量基地址,加上指令中给出的偏移量rel,得到,得到目标位置的地址目标位置的地址。即:。即:目标地址目标地址PCrelrel目标地址目标地址PC偏移量偏移量rel为为8位补码位补码,其值为其值为-128+127。rel0表明目标地址小、源地址大,程序向表明目标地址小、源地址大,程序向回跳转;回跳转;rel0,程序向前跳转。,程序向前跳转。3.2.7 指令寻
24、址指令寻址例如:例如:JZFIRST;(;(A)0,跳转到,跳转到FIRSTDJNZR7,LOOP;(;(R7)-10,跳转到,跳转到LOOP说明:说明:(1)在实际编程中在实际编程中,不需要计算不需要计算rel,rel由编译器自动计算;由编译器自动计算;(2)当跳转范围超出了当跳转范围超出了rel范围,编译范围,编译器会提示,对程序做适当调整即可。器会提示,对程序做适当调整即可。3.2.8 寻址空间及指令中的符号注释寻址空间及指令中的符号注释 一、寻址方式、寻址空间及范围一、寻址方式、寻址空间及范围寻址方式寻址方式操作数及寻址空间范围操作数及寻址空间范围立即数寻址立即数寻址在在ROM中,中,
25、随指令读入随指令读入直接寻址直接寻址片内片内RAM中,中,低低128字节和字节和SFR寄存器寻址寄存器寻址使用的寄存器:使用的寄存器:R0R7、A、B、C、DPTR 寄存器寄存器间接寻址间接寻址片内片内RAM:用用Ri、SP;范围范围256B,不含,不含SFR片外片外RAM:用用Ri、DPTR;范围为范围为64KB变址寻址变址寻址用用A+PC、A+DPTR;在;在ROM中;中;范围分别为范围分别为PC之后之后256B之内和之内和64KB全空间全空间位寻址位寻址在位寻址区域在位寻址区域;RAM的的202FH和和SFR指令绝对寻址指令绝对寻址 操作数是目标地址;在操作数是目标地址;在ROM中;中;
26、64KB全空间全空间指令相对寻址指令相对寻址 操作数是相对地址;在操作数是相对地址;在ROM中;中;范围范围-1281273.2.8 寻址空间及指令中的符号注释寻址空间及指令中的符号注释二、指令中常用符号二、指令中常用符号Rn:n=07。当前选中的。当前选中的工作寄存工作寄存器器R0R7。Ri:i=0、1。当前选中的工作寄存。当前选中的工作寄存器组中可作为器组中可作为地址指针的地址指针的R0和和R1。#data:8位立即数位立即数。#data16:16位立即数位立即数。direct:8位片内位片内RAM单元地址单元地址,包括,包括低低128B和和SFR,但不包括高,但不包括高128B。addr
27、16:程序存储空间的程序存储空间的16位地址位地址 3.2.8 寻址空间及指令中的符号注释寻址空间及指令中的符号注释rel:补码形式的补码形式的8位地址偏移量位地址偏移量。以下面指令的第一个字节为基地址,地址偏以下面指令的第一个字节为基地址,地址偏移量在移量在-128+127。bit:片内片内RAM或或SFR中的直接寻址中的直接寻址位地址位地址:间址寄存器的前缀符号间址寄存器的前缀符号,表示,表示间接寻址。间接寻址。3.2.8 寻址空间及指令中的符号注释寻址空间及指令中的符号注释():表示表示中的内容中的内容 ():表示由表示由中指向的地址单元中中指向的地址单元中的内容的内容:逻辑与逻辑与:逻
28、辑或逻辑或:逻辑异或逻辑异或、:指令操作流程,将内容送到箭指令操作流程,将内容送到箭头指向的地方头指向的地方 3.3 MCS-51单片机指令系统单片机指令系统 主要内容主要内容3.3.1 数据传送指令数据传送指令3.3.2 算术运算指令算术运算指令3.3.3 逻辑运算指令逻辑运算指令3.3.4 控制程序转移指令控制程序转移指令3.3.5 位操作指令位操作指令3.3 MCS-51单片机指令系统单片机指令系统 指令概述指令概述MCS-51单片机指令系统有单片机指令系统有111条指令,条指令,分类如下。分类如下。1、按字节分类、按字节分类单字节指令:单字节指令:49条;条;双字节指令:双字节指令:4
29、5条条三字节指令:三字节指令:17条条2、按执行时间分类、按执行时间分类单周期指令:单周期指令:64条;条;双周期指令:双周期指令:45条条四周期指令:四周期指令:2条(乘、除指令)条(乘、除指令)3.3 MCS-51单片机指令系统单片机指令系统 3、按功能分类、按功能分类(分为(分为5大类)大类)数据传送指令:数据传送指令:29条条算术运算指令:算术运算指令:24条条逻辑运算指令:逻辑运算指令:24条条控制程序转移指令:控制程序转移指令:17条条位操作指令:位操作指令:17条条MCS-51指令没有复杂的寻址方式,并且指令没有复杂的寻址方式,并且助记符只有助记符只有42种,所以单片机指令容易理
30、种,所以单片机指令容易理解、容易记忆、容易掌握解、容易记忆、容易掌握。3.3.1 数据传送指令数据传送指令数据传送是使用最频繁的一类指令。数据传送是使用最频繁的一类指令。所谓传送,所谓传送,就是把源地址单元的内就是把源地址单元的内容传送到目的地址单元中去,而源地址单元容传送到目的地址单元中去,而源地址单元中的内容不变中的内容不变。数据传送指令可以分为三组:数据传送指令可以分为三组:普通传送普通传送指令、数据交换指令、堆栈操作指令。指令、数据交换指令、堆栈操作指令。这类指令一般不影响程序状态字,这类指令一般不影响程序状态字,只有只有目的操作数是累加器目的操作数是累加器A时,影响标志位时,影响标志
31、位P。3.3.1 数据传送指令数据传送指令一、普通传送指令一、普通传送指令普通传送指令以助记符普通传送指令以助记符MOV为基础为基础,分,分为:为:片内数据存储器传送指令,用片内数据存储器传送指令,用MOV片外数据传送指令,用片外数据传送指令,用MOVX程序存储器传送指令,用程序存储器传送指令,用MOVC3.3.1 数据传送指令数据传送指令1、片内数据存储器传送指令、片内数据存储器传送指令MOV 格式:格式:MOV 目的操作数,源操作数目的操作数,源操作数源操作数:源操作数:可以是可以是A、Rn、Ri、direct、#data目的操作数:目的操作数:可以是可以是A、Rn、Ri、direct、D
32、PTR以目的操作数的不同可以分为五个小组,以目的操作数的不同可以分为五个小组,共共16条指令。条指令。3.3.1 数据传送指令数据传送指令(1)以)以A为目的操作数为目的操作数MOVA,Rn ;(Rn)A E8EFMOVA,direct ;(direct)A E5 directMOVA,Ri ;(Ri)A E6 E7 MOVA,#data ;data A 74 data工作寄存器工作寄存器Rn:R0R7Ri间接寻址寄存器:间接寻址寄存器:R0或或R1本组本组4条指令都影响条指令都影响PSW中的中的P标志位标志位指令字节数:指令字节数:1、2、1、2 3.3.1 数据传送指令数据传送指令(2)以
33、)以Rn为目的操作数为目的操作数MOVRn,A;(A)Rn MOVRn,direct;(direct)RnMOVRn,#data;data Rn本组指令都不影响本组指令都不影响PSW中的标志位中的标志位。指令字节数:指令字节数:1、2、2 3.3.1 数据传送指令数据传送指令(3)以直接地址)以直接地址direct为目的操作数为目的操作数MOVdirect,A;(A)directMOVdirect,Rn;(Rn)directMOVdirect2,direct1 ;(direct1)direct2MOVdirect,Ri;(Ri)directMOVdirect,#data;data direct
34、本组指令都不影响本组指令都不影响PSW中的标志位中的标志位指令字节数:指令字节数:2、2、3、2、3 3.3.1 数据传送指令数据传送指令(4)以间接地址)以间接地址Ri为目的操作数为目的操作数MOVRi,A;(A)Rn MOVRi,direct;(direct)RnMOVRi,#data;data Rn本组指令都不影响本组指令都不影响PSW中的标志位中的标志位。3.3.1 数据传送指令数据传送指令(5)以)以DPTR为目的操作数为目的操作数MOVDPTR,#data16;dataHDPH,dataLDPL该指令不影响该指令不影响PSW中的标志位。中的标志位。例例3-1 设片内设片内RAM中(
35、中(30H)=40H,(40H)=10H,分析以下程序执行后各单元,分析以下程序执行后各单元及寄存器中的内容。及寄存器中的内容。3.3.1 数据传送指令数据传送指令MOVR0,#30H;30H R0MOVA,R0;(R0)AMOVR1,A;(A)R1MOVB,R1;(R1)BMOV10H,#20H;20H 10H执行上述指令后的结果为:执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H,(B)=10H,(10H)=20H3.3.1 数据传送指令数据传送指令2、片外数据存储器传送指令、片外数据存储器传送指令MOVXMOVX A,Ri;(P2),(Ri)AMOVX Ri,A;A(P
36、2,Ri)MOVX A,DPTR;(DPTR)AMOVX DPTR,A;A(DPTR)第第1和第和第3条指令是执行总线读操作条指令是执行总线读操作,读,读控制信号控制信号RD有效;有效;第第2和第和第4条指令是执行条指令是执行总线写操作总线写操作,写控制信号,写控制信号WR有效。有效。这组指令中这组指令中第第1、3两条指令影响两条指令影响P标志位标志位,其它其它2条指令不影响任何标志位。条指令不影响任何标志位。3.3.1 数据传送指令数据传送指令例例3-2 设片外设片外RAM空间(空间(0203H)=6FH,分析执行下面指令后的结果分析执行下面指令后的结果。MOVDPTR,#0203H;020
37、3H DPTRMOVX A,DPTR;(DPTR)AMOV30H,A;(A)30HMOVA,#0FH;0FH AMOVX DPTR,A;(A)(DPTR)执行结果为:(执行结果为:(DPTR)=0203H,(30H)=6FH,(,(0203H)=(A)=0FH3.3.1 数据传送指令数据传送指令3、程序存储器传送指令、程序存储器传送指令MOVC该类指令又称为查表指令,经常用于查表。该类指令又称为查表指令,经常用于查表。这类指令只有以下这类指令只有以下2条单字节指令。条单字节指令。MOVC A,A+DPTR ;(A)+(DPTR)AMOVC A,A+PC ;(A)+(PC)A前者叫远程查表指令(
38、前者叫远程查表指令(64KB全空间),全空间),后者叫近程查表指令(后者叫近程查表指令(PC处处256B)。)。这两条指令这两条指令都影响都影响P标志位标志位。3.3.1 数据传送指令数据传送指令地址偏移量地址偏移量的计算方法的计算方法使用第使用第2条指令的关键,是准确计算从本条指令的关键,是准确计算从本指令到数据所在处的指令到数据所在处的地址偏移量地址偏移量。将将分为两段:表首偏移和表内偏移分为两段:表首偏移和表内偏移地址偏移量地址偏移量表首偏移量表内偏移量表首偏移量表内偏移量表首偏移量为:表首偏移量为:表首偏移量表首地址表首偏移量表首地址PC3.3.1 数据传送指令数据传送指令例例3-3
39、从程序存储器从程序存储器2000H单元开始存放单元开始存放09的平方值,以的平方值,以PC作为基址寄存器,执行作为基址寄存器,执行查表指令得到查表指令得到6的平方值,并且送到片内的平方值,并且送到片内RAM中的中的30H单元。单元。设设MOVC指令所在的地址为指令所在的地址为1FA0H,则,则表首偏移量表首偏移量2000H(1FA0H1)5FH,表内偏移量为,表内偏移量为6。相应的程序为:。相应的程序为:MOVA,#5FH;表首偏移送表首偏移送AADDA,#06H;计算总偏移;计算总偏移 MOVCA,A+PC;读表中数据;读表中数据MOV30H,A3.3.1 数据传送指令数据传送指令用以用以D
40、PTR为基址寄存器的查表指令,其为基址寄存器的查表指令,其程序如下:程序如下:MOVDPTR,#2000HMOVA,#6MOVCA,A+DPTR MOV30H,A通过本例对两条查表指令比较可以看出,通过本例对两条查表指令比较可以看出,以以DPTR为基址寄存器的查表指令使用简单、为基址寄存器的查表指令使用简单、方便方便。3.3.1 数据传送指令数据传送指令二、数据交换指令二、数据交换指令数据交换指令则数据作双向传送数据交换指令则数据作双向传送,传送,传送后,前一个操作数传送到了后一个操作数所后,前一个操作数传送到了后一个操作数所保存的地方,后一个操作数传送到了前一个保存的地方,后一个操作数传送到
41、了前一个操作数所保存的地方。操作数所保存的地方。数据交换指令要求第一个操作数必须为数据交换指令要求第一个操作数必须为累加器累加器A。共共5条指令,分为字节交换和半字节交换条指令,分为字节交换和半字节交换两个类型。两个类型。3.3.1 数据传送指令数据传送指令1、字节交换指令、字节交换指令XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)这这3条指令条指令都影响都影响P标志位标志位2、低半字节交换指令、低半字节交换指令XCHDA,Ri ;(A03)(Ri)03)这条指令这条指令影响影响P标志位标志位3、A自身半字节交换指令自身半字节交换指令
42、SWAPA;(A 03)(A47)这条指令这条指令不影响任何标志位不影响任何标志位3.3.1 数据传送指令数据传送指令例例3-4 设设(R0)=30H,(30H)=4AH,(A)=28H,则则分别执行分别执行“XCH A,R0”、“XCH A,R0”“XCHD A,R0”、“SWAP A”后各单元的内容。后各单元的内容。执行:执行:XCH A,R0;后(;后(A)=30H,(,(R0)=28H执行:执行:XCH A,R0;后(;后(A)=4AH,(,(30H)=28H执行:执行:XCHD A,R0 ;后(;后(A)=2AH,(,(30H)=48H执行:执行:SWAP A;后(;后(A)=82H
43、,(,(30H)=4AH3.3.1 数据传送指令数据传送指令三、堆栈操作指令三、堆栈操作指令堆栈操作有进栈和出栈两条指令,堆栈操作有进栈和出栈两条指令,常用常用于保存和恢复现场于保存和恢复现场。PUSHdirect;先先(SP)+1 SP,;后后(direct)(SP)POPdirect;先先(SP)direct,;后后(SP)-1 SPPUSH为进栈操作为进栈操作,POP为出栈操作。为出栈操作。当操作数是累加器当操作数是累加器A时,影响时,影响P标志位标志位。3.3.1 数据传送指令数据传送指令例例3-5 若在程序存储器中若在程序存储器中2000H单元开始单元开始的区域依次存放着的区域依次存
44、放着09的平方值,的平方值,用查表指用查表指令读取令读取3的平方值并存于片内的平方值并存于片内RAM中中30H单单元元,要求操作后保持,要求操作后保持DPTR中原来的内容不中原来的内容不变。变。为了使用为了使用DPTR,并且保持原来的内容不,并且保持原来的内容不变,应该在使用变,应该在使用DPTR前使其进栈,使用后前使其进栈,使用后再出栈恢复其原来内容再出栈恢复其原来内容。程序如下:程序如下:3.3.1 数据传送指令数据传送指令注意:注意:(1)进栈与出栈必须成对使用进栈与出栈必须成对使用;(2)先进栈的必须后出栈,后进栈的必须先先进栈的必须后出栈,后进栈的必须先出栈出栈,否则会出现,否则会出
45、现DPL与与DPH内容互换。内容互换。PUSHDPHPUSHDPLMOVDPTR,#2000HMOVA,#3MOVCA,A+DPTRMOV30H,APOPDPLPOPDPH3.3.2 算术运算指令算术运算指令指令内容:指令内容:包括加、减、乘、除、包括加、减、乘、除、BCD码调整等指令,共有码调整等指令,共有24条。条。CPU的运算能力:的运算能力:只能执行无符号二进只能执行无符号二进制整数运算,可以借助于溢出标志位,实现制整数运算,可以借助于溢出标志位,实现有符号数的补码运算;借助于进位标志,可有符号数的补码运算;借助于进位标志,可以实现多精度加、减运算。以实现多精度加、减运算。对标志位的影
46、响:对标志位的影响:结果会结果会影响影响进位标志进位标志CY、半进位标志、半进位标志AC、溢出标志、溢出标志OV、奇偶、奇偶标志位标志位P,但加,但加1和减和减1指令不影响这些标志指令不影响这些标志位。位。3.3.2 算术运算指令算术运算指令指令中的操作数:指令中的操作数:多数以累加器多数以累加器A作为第作为第一操作数,第二操作数可以是工作寄存器一操作数,第二操作数可以是工作寄存器Rn、直接地址数据、间接地址数据和立即数。即直接地址数据、间接地址数据和立即数。即第一操作数:第一操作数:多为多为A第二操作数:第二操作数:Rn、direct、Ri、#data为了便于讨论,将其分为为了便于讨论,将其
47、分为5个类型。个类型。3.3.2 算术运算指令算术运算指令一、加法指令一、加法指令分为不带进位加法、带进位加法和加分为不带进位加法、带进位加法和加1指令指令1、不带进位加法指令、不带进位加法指令ADDADD A,Rn;(A)+(Rn)AADD A,direct;(A)+(direct)AADD A,Ri;(A)+(Ri)AADD A,#data;(A)+dataA 这组指令这组指令影响标志位影响标志位CY、AC、OV和和P,溢出标志,溢出标志OV只对有符号运算有意义。只对有符号运算有意义。3.3.2 算术运算指令算术运算指令2、带进位加法指令、带进位加法指令ADDCADDCA,Rn;(A)+(
48、Rn)+CYAADDCA,direct;(A)+(direct)+CYAADDCA,Ri;(A)+(Ri)+CYAADDCA,#data;(A)+data+CYA 这组指令这组指令影响标志位影响标志位CY、AC、OV和和P,溢出标志溢出标志OV只对有符号运算有意义。只对有符号运算有意义。3.3.2 算术运算指令算术运算指令例例3-7 试编写程序,把试编写程序,把R1R2和和R3R4中的中的两个两个16位数相加,结果存放在位数相加,结果存放在R5R6中。中。思路:思路:先对两个低字节相加,再对两个高先对两个低字节相加,再对两个高字节相加。字节相加。(1)低字节)低字节R2和和R4相加:相加:使用
49、使用ADD,其和存放于其和存放于R6中;中;(2)高字节)高字节R1和和R3相加:相加:使用使用ADDC,其和存放于,其和存放于R5中。中。程序段如下页。程序段如下页。3.3.2 算术运算指令算术运算指令程序段如下:程序段如下:MOVA,R2;(;(R2)AADDA,R4;(;(A)+(R4)AMOVR6,A;(;(A)R6MOVA,R1;(;(R1)AADDC A,R3;(A)+(R3)+CYAMOVR5,A;(;(A)R5 3.3.2 算术运算指令算术运算指令3、加加1指令指令INCINCA;(;(A)+1 AINCRn;(;(Rn)+1 RnINCdirect;(;(direct)+1
50、directINCRi;(;(Ri)+1(Ri)INCDPTR;(;(DPTR)+1 DPTR这组指令除了这组指令除了第一条影响标志位第一条影响标志位P之外,之外,其它指令不影响标志位。其它指令不影响标志位。3.3.2 算术运算指令算术运算指令二、减法指令二、减法指令减法指令分为带借位减法指令和减减法指令分为带借位减法指令和减1指令。指令。1、带借位减法指令、带借位减法指令SUBBSUBBA,Rn;(A)-(Rn)-CYASUBBA,direct;(A)-(direct)-CYASUBBA,Ri;(A)-(Ri)-CYASUBBA,#data;(A)-data-CYA这组指令这组指令影响标志位