第3章 80C51单片机寻址方式和指令系统_第1页
第3章 80C51单片机寻址方式和指令系统_第2页
第3章 80C51单片机寻址方式和指令系统_第3页
第3章 80C51单片机寻址方式和指令系统_第4页
第3章 80C51单片机寻址方式和指令系统_第5页
已阅读5页,还剩189页未读 继续免费阅读

下载本文档

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

文档简介

1、12第第2 2章章:80C51:80C51系列单片机基本结构及原理系列单片机基本结构及原理3.1 3.1 汇编语言指令格式及其常用符汇编语言指令格式及其常用符 3.1.1 3.1.1 汇编语言指令格式汇编语言指令格式 3.1.2 3.1.2 机器码的三种格式机器码的三种格式 3.1.3 3.1.3 指令中常用符号说明指令中常用符号说明3.2 80C513.2 80C51的寻址方式的寻址方式 3.2.1 3.2.1 立即寻址立即寻址 3.2.2 3.2.2 直接寻址直接寻址 3.2.3 3.2.3 寄存器寻址寄存器寻址 3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址 3.2.5 3.2.5

2、 变址寻址变址寻址 3.2.6 3.2.6 相对寻址相对寻址 3.2.7 3.2.7 位寻址位寻址目录目录3第第2 2章章:80C51:80C51系列单片机基本结构及原理系列单片机基本结构及原理3.3 3.3 数据传送类指令(数据传送类指令(2929条)条) 3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 3.3.2 3.3.2 访问外部访问外部RAMRAM的数据传送指令的数据传送指令MOVX MOVX 3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC 3.3.4 3.3.4 数据交换指令数据交换指令 3.3.5 3.3.5

3、 堆栈操作指令堆栈操作指令 3.4 3.4 算术运算类指令(算术运算类指令(2424条)条) 3.4.1 3.4.1 加法指令加法指令 3.4.2 3.4.2 减法指令减法指令 3.4.3 3.4.3 乘、除法指令乘、除法指令3.5 3.5 逻辑运算及移位类指令逻辑运算及移位类指令(24(24条条) ) 3.5.1 3.5.1 逻辑与运算指令逻辑与运算指令 3.5.2 3.5.2 逻辑或运算指令逻辑或运算指令目录目录4第第2 2章章:80C51:80C51系列单片机基本结构及原理系列单片机基本结构及原理 3.5.3 3.5.3 逻辑异或运算指令逻辑异或运算指令 3.5.4 3.5.4 累加器清

4、零、取反指令累加器清零、取反指令 3.5.5 3.5.5 循环移位指令循环移位指令3.6 3.6 控制转移类指令(控制转移类指令(1717条)条) 3.6.1 3.6.1 无条件转移指令无条件转移指令 3.6.2 3.6.2 条件转移指令条件转移指令 3.6.3 3.6.3 子程序调用及返回指令子程序调用及返回指令 3.6.4 3.6.4 空操作指令空操作指令3.7 3.7 位操作类指令位操作类指令 3.7.1 3.7.1 位变量传送指令位变量传送指令 3.7.2 3.7.2 位置位、清零指令位置位、清零指令 3.7.3 3.7.3 位逻辑运算指令位逻辑运算指令 3.7.4 3.7.4 位控制

5、转移指令位控制转移指令目录目录5第第3 3章章80C5180C51单片机的寻址方式和指令系统单片机的寻址方式和指令系统l指令指令是规定计算机进行某种操作的命令。l一台计算机所能执行的指令集合称为该计算机的指令系统指令系统。I能被计算机直接识别、执行的指令是使用二进制编码表示的指令,这种指令被称为机器语言指令机器语言指令。机器语言机器语言难编写、难读懂、难查错和难交流。I以助记符表示的指令被称为符号指令符号指令。汇编语言汇编语言就是典型的符号指令。l单片机常用的编程语言:汇编语言和汇编语言和C C语言语言。6第第3 3章章80C5180C51单片机的寻址方式和指令系统单片机的寻址方式和指令系统

6、80C51 80C51系列单片机汇编语言指令系统共有系列单片机汇编语言指令系统共有111111条指令,条指令,按功能划分,可分为五大类:按功能划分,可分为五大类:(1)(1)数据传送类指令数据传送类指令(29(29条条) ); (2)(2)算术运算类指令算术运算类指令(24(24条条) );(3)(3)逻辑运算及移位类指令逻辑运算及移位类指令(24(24条条) );(4)(4)控制转移类指令控制转移类指令(17(17条条) );(5)(5)位操作类指令位操作类指令(17(17条条) )。7 本节内容本节内容3.1.1 3.1.1 汇编语言指令格式汇编语言指令格式3.1.2 机器码的三种格式3.

7、1.3 指令中常用符号说明83.1.1 3.1.1 汇编语言指令格式汇编语言指令格式 一条完整的汇编语言指令通常由标号、操作码、操作数标号、操作码、操作数(一般包括目的操作数和源操作数)及指令的注释注释构成。指令格式:指令格式: 标号标号: : 操作数操作数 ,操作数,操作数;注释;注释 说明:说明:在一条指令中,方括号中的内容可有可无方括号中的内容可有可无,尖括号中的内容必尖括号中的内容必须有。须有。由指令格式可见,操作码是指令的核心,不可缺少。操作码是指令的核心,不可缺少。9标号标号标号是该指令的起始地址,是一种符号地址。标号可以由标号可以由1 18 8个字符组成,第一个字符必须是字母,其

8、余字符可以是字个字符组成,第一个字符必须是字母,其余字符可以是字母、数字或其他特定符号。标号后跟分界符母、数字或其他特定符号。标号后跟分界符“:”。操作码操作码指令的助记符。操作码规定了指令所能完成的操作功能,是指令的必需部分,是指令的核操作码规定了指令所能完成的操作功能,是指令的必需部分,是指令的核心,不可缺少。心,不可缺少。操作数操作数指出了指令的操作对象。操作数可以是一个具体的数据,也可以是存放数据的单元地址,还可以是操作数可以是一个具体的数据,也可以是存放数据的单元地址,还可以是符号常量或符号地址等。符号常量或符号地址等。操作数可分为目的操作数和源操作数,多个操作数之间用逗号操作数可分

9、为目的操作数和源操作数,多个操作数之间用逗号“,”分隔。分隔。注释注释为了方便阅读而添加的解释说明性的文字,用“;”开头。举例:举例:START: MOV A,#30H ; START: MOV A,#30H ; 将立即数将立即数30H30H传送至传送至A A中中10 本节内容本节内容3.1.1 汇编语言指令格式3.1.2 3.1.2 机器码的三种格式机器码的三种格式3.1.3 指令中常用符号说明113.1.2 3.1.2 机器码的三种格式:机器码的三种格式: 汇编语言需要编译成用机器语言表达的机器码才能在ROM中存放。l按所占字节分,分三种:按所占字节分,分三种:(1)单字节指令49条(只有

10、操作码,没有直接数字(只有寄存器名)(只有操作码,没有直接数字(只有寄存器名)(2)双字节指令45条(有一个字节(有一个字节“立即数立即数”或一个字节或一个字节“地址数地址数”)(3)三字节指令17条(有两个字节(有两个字节“立即数立即数”或两个字节或两个字节“地址数地址数”)l按执行时间来分,分三种:按执行时间来分,分三种:(1)1个机器周期(12个时钟振荡周期)的指令64条;(2)2个机器周期指令45条;(3)4个机器周期-乘、除指令2条。12一、单字节指令(一、单字节指令(4949条):条):两种编码格式:两种编码格式:1.81.8位编码只表示一个操作码编码,位编码只表示一个操作码编码,

11、其格式为:例如:例如:INC AINC A 该汇编指令的机器码为:0000 0100B其十六进制数为04H,操作数(累加器A)隐含在操作码中。注意:注意:在汇编语言指令中,在汇编语言指令中,“A”A”代表累加器,而用代表累加器,而用“ACC”ACC”代代表累加器的地址表累加器的地址E0HE0H。132.82.8位编码中包含操作码和寄存器编码,位编码中包含操作码和寄存器编码,其格式为:这类指令中高5位表示操作码,低3位rrr为存放操作数的寄存器编码Rn(n=0,7)。例如:例如:MOV AMOV A,R0R0该指令的编码为:1110 1000B其十六进制表示为E8H,低三位000为R0的编码。1

12、4二、双字节指令(二、双字节指令(4545条)条)双字节指令为双字节指令为1616位编码,位编码,其格式为: 第一个字节表示操作码,第二个字节为参与操作的操作数data或数据所在地址direct。例如:例如:MOV AMOV A,#30H#30H该指令两个字节的编码为0111 0100B,0011 0000B其十六进制表示为:74H,30H,其中74H存放在指令码的第一字节,data这个具体的数据存放在第二字节。15三、三字节指令(三、三字节指令(1717条):条):三字节指令为三字节指令为2424位编码,位编码,其格式为:第一个字节表示操作码,后两个字节为参与操作的操作数data或数据所在地

13、址direct。例如:例如:MOV 20HMOV 20H,#50H#50H该指令的3个字节编码为0111 0101B,0010 0000B,0101 0000B。其十六进制表示为75H,20H,50H。第一个字节存放75H这个操作码,第二个字节存放目的地址20H,第三个字节存放源操作数50H。16 本节内容本节内容3.1.1 汇编语言指令格式3.1.2 机器码的三种格式3.1.3 3.1.3 指令中常用符号说明指令中常用符号说明173.1.3 3.1.3 指令中常用符号说明指令中常用符号说明在描述在描述80C5180C51系列单片机指令系统的功能时,经常使用的符号及意义如下:系列单片机指令系统

14、的功能时,经常使用的符号及意义如下:Rn(n=ORn(n=O7)7) 当前选中的工作寄存器中的寄存器R0R7之一;Ri(i=0Ri(i=0、1)1) 当前选中的工作寄存器可作为地址指针的寄存器R0、R1;#data#data 8位立即数;#datal6#datal6 16位立即数; direct direct 片内部RAM的低128个单元地址,也可以是特殊功能寄存器SFR的单元地址或符号; addrll addrll 11位目的地址,只限于在ACALL和AJMP指令中使用;addrl6 addrl6 16位目的地址,只限于在LCALL和LJMP指令中使用;rel rel 补码形式表示的8位地址

15、偏移量,其值的范围:128127; bit bit 片内RAM位寻址区或可位寻址的特殊功能寄存器的位地址; 间接寻址或变址寻址的前缀标志;C C 进位标志位,也称为位累加器; 加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;(X)(X) 由X指定的寄存器或地址单元中的内容;(X)(X) 由X寄存器的内容作为地址的存储单元的内容; $ $ 本条指令的起始地址; 指令操作流程,将箭头右边的内容送到箭头左边的单元中; 数据交换。18指令中常用符号说明:指令中常用符号说明:Rn当前选中的工作寄存器组中的寄存器当前选中的工作寄存器组中的寄存器R0-R7R0-R7之一,之一, 所以所以n=

16、0-7n=0-7。Ri当前选中的工作寄存器组中可作地址指针的寄存器当前选中的工作寄存器组中可作地址指针的寄存器R0R0、R1R1,所以,所以i=0i=0、1 1。#data8 8位立即数。位立即数。#data161616位立即数。位立即数。Direct内部内部RAMRAM的的8 8位地址。即可以是内部位地址。即可以是内部RAMRAM的低的低128128个单元地址,也可以是特殊功能个单元地址,也可以是特殊功能寄存器的单元地址或符号。在指令中寄存器的单元地址或符号。在指令中directdirect表示直接寻址方式。表示直接寻址方式。Addr111111位目的地址,只限于在位目的地址,只限于在ACA

17、LLACALL和和AJMP AJMP 指令中使用。指令中使用。Addr161616位目的地址,只限于在位目的地址,只限于在LCALLLCALL和和LJMP LJMP 指令中使用。指令中使用。Rel补码形式表示的补码形式表示的8 8位地址偏移量,在相对转移指令中使用。位地址偏移量,在相对转移指令中使用。Bit表示片内表示片内RAMRAM位寻址区或可位寻址的特殊功能寄存器的位地址;位寻址区或可位寻址的特殊功能寄存器的位地址;间接寻址方式中间址寄存器的前缀标志;间接寻址方式中间址寄存器的前缀标志;C进位标志位,它是布尔处理机的累加器,也称之为位累加器;进位标志位,它是布尔处理机的累加器,也称之为位累

18、加器;/加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;(x)由由x x指定的寄存器或地址单元中的内容;指定的寄存器或地址单元中的内容;(x)由由x x所指寄存器的内容作为地址的存储单元的内容;所指寄存器的内容作为地址的存储单元的内容;$表示本条指令的起始地址;表示本条指令的起始地址;表示指令操作流程,将箭头右边的内容送到箭头左边的单元中。表示指令操作流程,将箭头右边的内容送到箭头左边的单元中。19l寻址寻址就是寻找操作数的地址。l寻址方式寻址方式则指出寻找操作数地址的方式方法。 一条指令可能含多种寻址方式,通常根

19、据指令的源操作数来决定指令的根据指令的源操作数来决定指令的寻址方式。寻址方式。l寻址方式总体上分为两大类:寻址方式总体上分为两大类:一是操作数的寻址。一是操作数的寻址。二是跳转、调用等指令所涉及的跳转目标地址和调用程序的首地址的寻址。二是跳转、调用等指令所涉及的跳转目标地址和调用程序的首地址的寻址。2080C5180C51单片机的寻址方式有七种单片机的寻址方式有七种: :l 立即数寻址立即数寻址l 直接寻址直接寻址l 寄存器寻址寄存器寻址l 寄存器间接寻址寄存器间接寻址l 基址变址寻址基址变址寻址l 相对寻址相对寻址l 位寻址位寻址21 本节内容本节内容3.2.1 3.2.1 立即寻址立即寻址

20、3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 相对寻址 3.2.7 位寻址223.2.13.2.1立即寻址立即寻址 所谓立即寻址立即寻址就是在指令中直接给出操作数。 通常把出现在指令中的操作数称为立即数立即数,为了与直接寻址指令中的直接地址相区别,指令中需要在直接给出的具体数据前面加“#”#”标志标志。23【例【例3-13-1】执行指令:】执行指令:MOV AMOV A,#30H #30H 后累加器后累加器A A的值是多少?的值是多少?解:执行指令如图解:执行指令如图3-13-1所示,所示,(A)=30H(A)=30H。 汇编指令MOV

21、 A,#30H编译成机器码后为:74H,30H,其中30H就是立即数,该指令功能是将30H这个数本身送入累加器A中,执行完这条指令后累加器A中的值为30H,即(A)=30H。立即寻址所对应的存储空间为ROM空间。2425 本节内容本节内容3.2.1 立即寻址3.2.2 3.2.2 直接寻址直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 相对寻址 3.2.7 位寻址263.2.2 3.2.2 直接寻址直接寻址 直接寻址方式直接寻址方式就是在指令中直接给出操作数存放在内部RAM的地址,或直接给出特殊功能寄存器的地址或符号。 直接寻址方式可访问以下存储空间

22、:直接寻址方式可访问以下存储空间:1)1)内部内部RAMRAM低低128128个字节单元,在指令中直接地址以单元地址的形式给出;个字节单元,在指令中直接地址以单元地址的形式给出;2)2)特殊功能寄存器。特殊功能寄存器。27【例【例3-23-2】已知内部】已知内部RAM (30H)=58HRAM (30H)=58H,执行指令,执行指令“MOV AMOV A,30H”30H”后,(后,(A A)= =?解:指令执行过程如图3-2所示,结果:(A)=58H 。该指令在ROM中的机器码为:E5H、30H,其中30H表示直接地址,该指令功能是把内部RAM地址为30H单元中的操作数58H传送给累加器A,累

23、加器原先的数值被覆盖。2829注意:注意:1 1)对于特殊功能寄存器,其直接地址既可以写成特殊功能寄)对于特殊功能寄存器,其直接地址既可以写成特殊功能寄存器的直接地址形式。存器的直接地址形式。如指令:如指令:MOV AMOV A,90H90H说明:说明:90H是特殊功能寄存器P1的直接地址形式。2 2)更常采用特殊功能寄存器的符号名称来表示。)更常采用特殊功能寄存器的符号名称来表示。如指令:如指令:MOV AMOV A,P1P1说明:说明:P1是特殊功能寄存器的符号名称,也是符号地址,在指令中符号“P1”与地址“90H”是等同的。30 本节内容本节内容3.2.1 立即寻址3.2.2 直接寻址

24、3.2.3 3.2.3 寄存器寻址寄存器寻址 3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 相对寻址 3.2.7 位寻址313.2.3 3.2.3 寄存器寻址寄存器寻址 寄存器寻址寄存器寻址就是以寄存器的内容作为操作数。【例【例3-33-3】如】如(RO)=60H(RO)=60H,则执行,则执行MOV AMOV A,R0 R0 指令后,指令后,(A)=?(A)=?解:指令执行过程如图3-3,结果:(A)= 60H 。 指令在ROM中的机器码为E8H,指令对应的机器码是:E8H=1110 1000B,二进制的后三位000就是隐含的R0寄存器的编码,如果是R7其编码为111。由于寄存器

25、在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。3233能实现这种寻址方式的寄存器有:能实现这种寻址方式的寄存器有:(1 1)工作寄存器)工作寄存器 R0R0R7R7 (4(4组工作寄存器均可组工作寄存器均可) )(2 2)累加器)累加器A A ( (注:使用注:使用A A为寄存器寻址,使用为寄存器寻址,使用ACCACC为直接寻址为直接寻址) )(3 3)寄存器)寄存器B B ( (注:以注:以ABAB寄存器对的形式出现时为寄存器寻址,单独出现寄存器对的形式出现时为寄存器寻址,单独出现时为直接寻址时为直接寻址) )(4 4)数据指针)数据指针DPTRDPTR 例如:例如:MOV AMO

26、V A,R0 R0 ;将R0寄存器的内容送到累加器A中。 MOV R2MOV R2,A A ;把累加器A中的内容传送到R2寄存器中。说明:说明:l采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器;l寄存器在CPU内部,故有较高的运算速度。34 本节内容本节内容3.2.1 立即寻址3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址3.2.5 变址寻址3.2.6 相对寻址 3.2.7 位寻址353.2.4 3.2.4 寄存器间接寻址寄存器间接寻址 所谓寄存器间接寻址寄存器间接寻址就是以寄存器中的内容作为RAM地址,该地址中的内容

27、才是操作数。 寄存器名称前加“”标志标志来表示寄存器间接寻址。【例【例3-43-4】 (RO)=60H(RO)=60H,(60H)=32H(60H)=32H,则执行,则执行MOV AMOV A,R0 R0 指令后,指令后,(A)=?(A)=?,(RO)=?(RO)=?解:指令执行过程如图3-4,结果:(A)= 32H,(RO)=60H。 36说明:说明: lR0寄存器的内容60H是操作数地址,内部RAM60H的内容32H才是操作数,把该操作数复制到累加器A中,A中原来的数据被覆盖了,结果(A)=32H。l若是寄存器寻址指令:MOV A,R0;则执行结果(A)=60H。371 1)80C5180

28、C51系列单片机规定只能用寄存器系列单片机规定只能用寄存器R0R0、R1R1、DPTRDPTR作为间接作为间接寻址的寄存器。寻址的寄存器。2 2)间接寻址可以访问的存储空间为)间接寻址可以访问的存储空间为内部内部RAMRAM和和外部外部RAMRAM。内部内部RAMRAM的低的低128128个单元采用个单元采用R0R0、R1R1作为间址寄存器,在指令中表作为间址寄存器,在指令中表现为现为R0R0、R1R1的形式;的形式;外部外部RAMRAM的寄存器间接寻址有两种形式:的寄存器间接寻址有两种形式:一是采用一是采用R0R0、R1R1作为间址寄存器,指令中表现为作为间址寄存器,指令中表现为R0R0、R

29、1R1的形式,可寻址外部的形式,可寻址外部RAMRAM的低的低256256个单元,即可访问地址范围为个单元,即可访问地址范围为0000H0000H00FFH00FFH的单元;的单元;二是采用二是采用1616位的位的DPTRDPTR作为间址寄存器,指令中表现为作为间址寄存器,指令中表现为DPTRDPTR的形式,可寻址外部的形式,可寻址外部RAMRAM整个整个64KB64KB个地址空间,地址范围为个地址空间,地址范围为0000H0000HFFFFHFFFFH的单元。的单元。38 本节内容本节内容3.2.1 立即寻址3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址3.2.5

30、3.2.5 变址寻址变址寻址3.2.6 相对寻址 3.2.7 位寻址393.2.5 3.2.5 变址寻址变址寻址 变址寻址变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器(存放地址偏移量),并以两者内容相加形成的16位地址作为操作数地址,用于读ROM数据操作。 在变址寻址中:在变址寻址中:操作数地址基址变址操作数地址基址变址l基址寄存器:基址寄存器:16位的地址指针寄存器DPTR或16位的PC寄存器l变址寄存器:变址寄存器:累加器A两者中的两者中的“内容内容”之和形成一个之和形成一个1616位的位的“地址地址”,该,该“地址地址”所指的存储单元所指的存储单元中的内容才是操作数

31、。中的内容才是操作数。40变址寻址用于两种情况:变址寻址用于两种情况:(1)用于对ROM(包含内外ROM)的数据进行寻址例如:例如:MOVC AMOVC A,A+DPTR A+DPTR ;A(A)+(DPTR)A(A)+(DPTR) MOVC A MOVC A,A+PC A+PC ;A(A)+(PC)A(A)+(PC)l第一条指令的功能将第一条指令的功能将A A的内容与的内容与DPTRDPTR的内容之和作为操作数地址,把该地的内容之和作为操作数地址,把该地址中的内容送入累加器址中的内容送入累加器A A中;中;l第二条指令的功能将第二条指令的功能将A A的内容与的内容与PCPC的内容之和作为操作

32、数地址,把该地址的内容之和作为操作数地址,把该地址中的内容送入累加器中的内容送入累加器A A中。中。41变址寻址用于两种情况:变址寻址用于两种情况:(2)用于跳转指令例如:例如:JMP A+DPTRJMP A+DPTRl跳转指令的功能是将累加器跳转指令的功能是将累加器A A的内容与数据指针的内容与数据指针DPTRDPTR的内容相加形成指令的内容相加形成指令跳转的目标地址,从而使程序转移到该地址运行。跳转的目标地址,从而使程序转移到该地址运行。注意:注意:变址寻址所找到的地址是ROM空间的地址,指令中表现为A+DPTR,A+PC的形式。42【例【例3-53-5】若】若(A)(A)03H03H,(

33、,(DPHDPH)=20H=20H,(,(DPLDPL)=00H=00H,即,即(DPTRDPTR)=2000H=2000H,ROMROM的(的(2003H2003H)=66H=66H。执行指令执行指令MOVC AMOVC A,A+DPTRA+DPTR后,后,(A)=?(A)=?解:指令执行过程如图3-5,结果:(A)= 66H,(RO)=60H。 该指令中累加器A的值和DPTR的值相加所得2003H为操作数所在ROM单元的地址,该地址中的数据66H才是要找的操作数,该指令将66H覆盖累加器A原来的值。4344 本节内容本节内容3.2.1 立即寻址3.2.2 直接寻址 3.2.3 寄存器寻址

34、3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 3.2.6 相对寻址相对寻址 3.2.7 位寻址453.2.6 3.2.6 相对寻址相对寻址 相对寻址相对寻址,用于相对转移指令相对转移指令,将程序计数器PC的当前值与指令中给出的偏移量rel相加,其结果作为转移地址送入PC中。说明:说明:l相对寻址能修改PC的值,故可用来实现程序的分支转移;lPC当前值是指正在执行指令的下一条指令的地址;lrel是一个带符号的8位二进制数,取值范围-128+127。46【例【例3-63-6】设指令】设指令SJMP 54HSJMP 54H存放在存放在ROMROM内以内以2000H2000H起始的单元,起

35、始的单元,求执行本指令后程序将跳转到何处执行?求执行本指令后程序将跳转到何处执行?解:这是无条件相对转移指令无条件相对转移指令,是双字节指令双字节指令,指令代码为80H、54H,其中80H是该指令的操作码,54H是偏移量。转移地址为转移地址为2000H+02H+54H2000H+02H+54H2056H2056H。故指令执行后,PC的值变为2056H,程序的执行顺序发生了转移,指令执行过程如图3-6所示。在实际编程中,在实际编程中,“rel” rel” 通常用标号代替。通常用标号代替。例:例:SJMP LOOP1SJMP LOOP14748 本节内容本节内容3.2.1 立即寻址3.2.2 直接

36、寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址3.2.5 变址寻址3.2.6 相对寻址 3.2.7 3.2.7 位寻址位寻址493.2.7 3.2.7 位寻址位寻址 80C51系列单片机有位处理功能,位寻址方式位寻址方式是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。 位寻址位寻址是在指令的操作数位置上直接给出位地址。 例如:例如:MOV C,07HMOV C,07H将位地址将位地址07H(07H(字节地址字节地址20H20H中最高位中最高位) )中的数据传传送到位累加器中的数据传传送到位累加器CYCY中。中。提示:提示:位地址里的数据只可能是一个 0 或 1。再如:再如

37、:MOV 30H,CMOV 30H,C CLR P1.0 CLR P1.0 ;(P1.0)0(P1.0)0 SETB ACC.7 SETB ACC.7 ;(ACC.7)1(ACC.7)1 CPL C CPL C ;CY/( CY )CY/( CY )50【例【例3-73-7】位地址为】位地址为07H07H单元中的值为单元中的值为1 1,CY=0CY=0,执行,执行MOV C,07HMOV C,07H指令后,指令后,CY=?CY=?解:该指令的功能是把位地址07H中的值传送到位累加器CY中。5151系列单片机的内部RAM有两个区域可以位寻址:M一个是位寻址区一个是位寻址区20H20H2FH2FH

38、单元的单元的128128位;位;M另一个是字节地址能被另一个是字节地址能被8 8整除的特殊功能寄存器的相应位。整除的特殊功能寄存器的相应位。52在在MCS-51MCS-51系列单片机中,位地址有以下几种表示方式:系列单片机中,位地址有以下几种表示方式:(1 1)直接使用位地址。)直接使用位地址。对于对于20H20H2FH2FH共共1616个单元的个单元的128128位,其位地址编号是位,其位地址编号是00H00H7FH7FH,例如,例如,20H20H单元单元的的0 07 7位的位地址为位的位地址为00H00H07H07H。(2 2)用单元地址加位序号表示。)用单元地址加位序号表示。如如25H.

39、525H.5表示表示25H25H单元的单元的D5D5位(位地址是位(位地址是2DH2DH),而),而PSWPSW中的中的D3D3可表示为可表示为D0H.3D0H.3。这种表示方法可以避免查表或计算,比较方便。这种表示方法可以避免查表或计算,比较方便。(3 3)用位名称表示。)用位名称表示。特殊功能寄存器中的可寻址位均有位名称,可以用位名称来表示该位。如可用特殊功能寄存器中的可寻址位均有位名称,可以用位名称来表示该位。如可用RS0RS0表示表示PSWPSW中的中的D3D3位:位:D0H.3D0H.3(4 4)对特殊功能寄存器可直接用寄存器符号加位序号表示。)对特殊功能寄存器可直接用寄存器符号加位

40、序号表示。如如PSWPSW中的中的D3D3位,又可表示为位,又可表示为PSW.3PSW.3。5354 本节内容本节内容3.3.1 3.3.1 内部内部RAMRAM数据传送指令数据传送指令 3.3.2 访问外部RAM的数据传送指令MOVX 3.3.3 读取ROM中常数表的查表指令MOVC3.3.4 数据交换指令 3.3.5 堆栈操作指令 55 数据传送类指令数据传送类指令(29条)是最常用、最基本的一类指令,主要用于数据的传送、保存及交换等场合主要用于数据的传送、保存及交换等场合。 数据传送类指令的一般功能是把源操作数传送到目的操作功能是把源操作数传送到目的操作数,指令执行后,源操作数不变,目的

41、操作数被源操作数代替。数,指令执行后,源操作数不变,目的操作数被源操作数代替。3.3.13.3.1内部内部RAMRAM数据传送指令数据传送指令 内部RAM的数据传送类指令共16条,包括累加器累加器、寄存器寄存器、特殊功能寄存器特殊功能寄存器、RAMRAM单元单元之间的相互数据传送。56一、以累加器一、以累加器A A为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV AMOV A,#data #data ;AdataAdata MOV A MOV A,direct direct ;A(direct)A(direct) MOV A MOV A,Rn Rn ;A(Rn)A(Rn) MOV

42、A MOV A,Ri Ri ;A(Ri)A(Ri) l这组指令的功能:这组指令的功能:将源操作数所指定的内容送入累加器A中。l源操作数可以采用立即寻址立即寻址、直接寻址直接寻址、寄存器寻址寄存器寻址和寄存寄存器间接寻址器间接寻址4种寻址方式。 57【例【例3-83-8】若(】若(RORO)=20H=20H,(20H)=66H(20H)=66H,试分别求解每条指令执,试分别求解每条指令执行后,行后,(A)=?(A)=?MOV AMOV A,#20H #20H ;A20HA20HMOV AMOV A,20H 20H ;A(20H)A(20H)MOV AMOV A,R0 R0 ;A(R0)A(R0)

43、MOV AMOV A,RO RO ;A(RO)A(RO)解:执行每条指令后:解:执行每条指令后:(A A)=20H =20H (A A)=66H=66H(A A)=20H =20H (A A)=66H=66H58二、以寄存器二、以寄存器RnRn为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV RnMOV Rn, A A ;Rn(A)Rn(A) MOV Rn MOV Rn,#data #data ;RndataRndata MOV Rn MOV Rn,direct direct ;Rn(direct)Rn(direct)l这组指令的功能:这组指令的功能:将源操作数所指定的内容送到当前

44、工作寄存器组R0R7中的某个寄存器中。l源操作数可以采用累加器累加器A A(属于寄存器寻址)、立即寻址立即寻址和直直接寻址。接寻址。注意:没有注意:没有“MOV RnMOV Rn,Rn”Rn”指令,也没有指令,也没有“MOV RnMOV Rn,Ri”Ri”指指令。令。59【例【例3-93-9】 已知已知(A)=50H(A)=50H,(R1)=10H(R1)=10H,(R2)=20H(R2)=20H,(R3)=30H(R3)=30H,(30H)=4FH(30H)=4FH,求解每条指令的执行结果。,求解每条指令的执行结果。 MOV R1 MOV R1,A A ;R1(A)R1(A) MOV R2

45、MOV R2,30H 30H ;R2(30H)R2(30H) MOV R3 MOV R3,#85H #85H ;R385HR385H解:执行后:解:执行后: (R1)=50H(R1)=50H;(R2)=4FH(R2)=4FH;(R3)=85H(R3)=85H。 第条指令的执行过程见图3-8。6061三、以直接地址为目的操作数的数据传送指令三、以直接地址为目的操作数的数据传送指令 MOV directMOV direct,A A ;direct(A)direct(A) MOV direct MOV direct,#data #data ;directdatadirectdata MOV dire

46、ct1 MOV direct1,direct2 direct2 ;direct1(direct2)direct1(direct2) MOV direct MOV direct,Rn Rn ;direct(Rn)direct(Rn) MOV direct MOV direct,Ri Ri ;direct(Ri)direct(Ri)l这组指令的功能:这组指令的功能:将源操作数所指出的内容送入由直接地址direct所指定的片内存储单元。l源操作数可以采用寄存器寻址寄存器寻址、立即寻址立即寻址、直接寻址直接寻址和寄存寄存器间接寻址器间接寻址四种方式。62【例【例3-103-10】 若(若(A A)=3

47、6H=36H,(,(50H50H)=22H=22H,(R0)=60H(R0)=60H,(60H)=72H(60H)=72H,求解每条指令执行后,(,求解每条指令执行后,(40H40H)?)?MOV 40HMOV 40H,A A ;40H(A)40H(A)MOV 40HMOV 40H,#50H #50H ;40H50H40H50HMOV 40HMOV 40H,50H 50H ;40H(50H)40H(50H)MOV 40HMOV 40H,R0 R0 ;40H40H(R0)R0)MOV 40HMOV 40H,R0 R0 ;(40H)(R0)(40H)(R0)解:每条指令的执行结果分别为:(40H)

48、36H;(40H)50H;(40H)22H;(40H)60H;(40H) 72H。63MOV 40HMOV 40H,R0 R0 ;(40H)(R0)(40H)(R0)第条指令的执行过程如图3-9所示。64四、以间接地址四、以间接地址RiRi为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV RiMOV Ri,A A ;(Ri)(A)(Ri)(A) MOV Ri MOV Ri,#data #data ;(Ri)data(Ri)data MOV Ri MOV Ri,direct direct ;(Ri)(direct)(Ri)(direct)l这组指令的功能:这组指令的功能:把源操作数所

49、指定的内容送入以R0或R1为地址指针的片内RAM单元中。l源操作数可以采用寄存器寻址寄存器寻址、立即寻址立即寻址和直接寻址直接寻址3种方式。注意注意: :没有没有“MOV RiMOV Ri,Rn”Rn”指令和指令和“MOV RiMOV Ri,Ri”Ri”指令。指令。 65【例【例3-113-11】 已知已知(R1)=60H(R1)=60H,(A)=20H(A)=20H,(,(30H30H)=22H =22H ,试分别,试分别求解每条指令的执行结果。求解每条指令的执行结果。 MOV R1 MOV R1,A A ;(R1)(A)(R1)(A) MOV R1 MOV R1,#26H #26H ;(R

50、1)26H(R1)26H MOV R1 MOV R1,30H 30H ;(R1)(30H)(R1)(30H)解:本条指令用源操作数的值修改的寄存器的值作为地址单元中的内容,寄存器的值不变。第三条指令的执行过程如图3-10所示。(R1)=60H,(60H)20H;(R1)=60H,(60H)26H; (R1)=60H,(60H)22H。6667五、以五、以DPTRDPTR为目的操作数的数据传送指令为目的操作数的数据传送指令 MOV DPTRMOV DPTR,#data16 #data16 ;DPTRdata16DPTRdata16l这是80C51系列单片机指令系统唯一的一条唯一的一条1616位传

51、送指令位传送指令。l功能:功能:是将外部存储器(RAM或ROM)某单元地址作为立即数送到DPTR中,立即数的高高8 8位送位送DPHDPH,低,低8 8位送位送DPLDPL。68在使用上述各类传送指令时,需注意以下几点:在使用上述各类传送指令时,需注意以下几点:(1)(1)要区分各种寻址方式的含义,正确传送数据。要区分各种寻址方式的含义,正确传送数据。【例【例3-123-12】若】若(R0)=30H(R0)=30H,(30H)=50H(30H)=50H时,以下指令的执行结果:时,以下指令的执行结果:MOV AMOV A,RO RO ;MOV AMOV A,R0 R0 ;MOV AMOV A,3

52、0H 30H ;MOV AMOV A,#30H #30H ;执行结果:执行结果:(A)=30H(A)=30H(A)=(30H)=50H(A)=(30H)=50H(A)=(30H)=50H(A)=(30H)=50H (A)=30H(A)=30H69MCS-51MCS-51单片机片内数据传送图单片机片内数据传送图 70在使用上述各类传送指令时,需注意以下几点:在使用上述各类传送指令时,需注意以下几点:(2)(2)所有传送指令都不影响标志位。所有传送指令都不影响标志位。这里所说的标志位是指CY、AC和OV,涉及累加器A的将影响奇偶标志位P。(3)(3)估算指令的字节数。估算指令的字节数。凡是指令中既

53、不包含直接地址,又不包含凡是指令中既不包含直接地址,又不包含8 8位立即数的指令均为一字节指令;位立即数的指令均为一字节指令;若指令中包含一个直接地址或若指令中包含一个直接地址或8 8位立即数,指令字节数为位立即数,指令字节数为2 2,若包含两个这样的操作数,则指令字节数为若包含两个这样的操作数,则指令字节数为3 3。如: MOV A,R0 ;1字节 MOV A,direct ;2字节 MOV direct,#data ;3字节 MOV DPTR,#datal16 ;3字节71 本节内容本节内容3.3.1 内部RAM数据传送指令 3.3.2 3.3.2 访问外部访问外部RAMRAM的数据传送指

54、令的数据传送指令MOVXMOVX 3.3.3 读取ROM中常数表的查表指令MOVC3.3.4 数据交换指令 3.3.5 堆栈操作指令 723.3.23.3.2访问外部访问外部RAMRAM的数据传送指令的数据传送指令MOVXMOVX 单片机片经常会与外部RAM进行数据交换,以及对外部I/O口输出控制信号或读取外部I/O口的状态。 80C51单片机与外部外部RAMRAM或I/OI/O口口进行数据传送没有专门的指令,都用MOVXMOVX指令指令,且必须采用寄存器间接寻址寄存器间接寻址的方法,并通过累加器累加器A A来传送。73一、单片机读取片外一、单片机读取片外RAMRAM或或I/OI/O口指令口指

55、令 MOVX AMOVX A,DPTR DPTR ;A(DPTR)A(DPTR) MOVX A MOVX A,Ri Ri ;A(Ri)A(Ri)二、单片机写片外二、单片机写片外RAMRAM或或I/OI/O口指令口指令 MOVX DPTRMOVX DPTR,A A ;(DPTR)(A)(DPTR)(A) MOVX Ri MOVX Ri,A A ;(Ri)(A) (Ri)(A) l该组指令的功能:该组指令的功能:在DPTR或R0、R1所指定的外部RAM单元与累加器A之间传送数据。l注意:注意:片外扩展的I/O接口进行数据的读、写没有专门的指令,只能与外部RAM共用这四条指令。74一、单片机读取片外

56、一、单片机读取片外RAMRAM或或I/OI/O口指令口指令 MOVX AMOVX A,DPTR DPTR ;A(DPTR)A(DPTR) MOVX A MOVX A,Ri Ri ;A(Ri)A(Ri)二、单片机写片外二、单片机写片外RAMRAM或或I/OI/O口指令口指令 MOVX DPTRMOVX DPTR,A A ;(DPTR)(A)(DPTR)(A) MOVX Ri MOVX Ri,A A ;(Ri)(A) (Ri)(A) l前两条指令是以DPTRDPTR作为间址寄存器,DPTR是16位,其寻址范围可达片外片外RAM 64KBRAM 64KB空间。l后两条指令是以R0R0或或R1R1作为

57、间址寄存器,R0或R1是8位,其寻址范围仅限于外部外部RAM 256RAM 256个字节个字节单元。75【例【例3-133-13】试编程,将片外】试编程,将片外RAMRAM的的2000H2000H单元内容送入片外单元内容送入片外RAMRAM的的20H20H单元中。单元中。解:片外RAM与片外RAM之间不能直接传送,需通过累加器A;另外,当片外RAM地址值大于0FFH时,不能用R0和R1作为间址寄存器,需用DPTR作为间址寄存器。编程如下:MOV DPTR,#2000H ;源数据地址送DPTRMOVX A, DPTR ;从外部RAM中取数送AMOV RO, #20H ;目的地址送DPTRMOVX

58、 R0, A ;A中内容送外部RAM76 本节内容本节内容3.3.1 内部RAM数据传送指令 3.3.2 访问外部RAM的数据传送指令MOVX 3.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC3.3.4 数据交换指令 3.3.5 堆栈操作指令 773.3.3 3.3.3 读取读取ROMROM中常数表的查表指令中常数表的查表指令MOVCMOVC 通常ROM中是用来存放供单片机CPU执行的程序代码的,但其内部也可以用来存放固定不变的数据,如:表格数据。 读取ROMROM中常数表的查表指令查表指令MOVCMOVC,能够将程序存储器表格中的数据或字段代码

59、送到累加器A中。 MOVC AMOVC A,A+DPTR A+DPTR ;A(A)+(DPTR)A(A)+(DPTR) MOVC A MOVC A,A+PC A+PC ;A(A)+(PC)A(A)+(PC)78 MOVC A MOVC A,A+DPTR A+DPTR ;A(A)+(DPTR)A(A)+(DPTR) MOVC A MOVC A,A+PC A+PC ;A(A)+(PC)A(A)+(PC)l指令的功能功能是从程序存储器中读取源操作数送入累加器从程序存储器中读取源操作数送入累加器A A中中。 l这两条指令特别适合于读取在ROM中建立的数据表格,故称做查表指令查表指令。l源操作数均为变址

60、寻址方式变址寻址方式。l两条指令都是一字节一字节指令。79二者在使用中有一点差异:二者在使用中有一点差异:l第一条指令采用第一条指令采用DPTRDPTR作为基址寄存器。作为基址寄存器。表格数据可存放在表格数据可存放在64KB ROM64KB ROM的任意位置,使用前需将表格首地址送入的任意位置,使用前需将表格首地址送入DPTRDPTR中,因此这条指令称为中,因此这条指令称为远程查表指令远程查表指令。l第二条指令是以第二条指令是以PCPC作为基址寄存器。作为基址寄存器。表格长度不能超过表格长度不能超过256B,256B,程序中程序中PCPC值是确定的,为下一条指令的地址,不能值是确定的,为下一条

温馨提示

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

评论

0/150

提交评论