《单片机原理与应用第3章》由会员分享,可在线阅读,更多相关《单片机原理与应用第3章(115页珍藏版)》请在金锄头文库上搜索。
1、主讲:潘静,第3章 单片机汇编程序设计,3.1 单片机指令系统概述3.2 80C51 单片机指令寻址方式3.3 80C51 单片机指令分类介绍3.4 常用伪指令3.5 汇编程序设计,3.1 单片机指令系统概述,指令: 规定计算机基本操作的语句或命令。指 令通常有两个组成部分:操作码和操作数。指令系统:一个单片机所能执行的指令集合即为它的指令系统。,一条汇编语言指令中最多包含 4 个区段, 如下所示: 标号: 操作码 操作数 ;注释4 个区段之间要用分隔符分开,标号与操作码之间用“:”隔开, 操作码与操作数之间用空格隔开, 操作数与注释之间用“;”隔开, 如果操作数有两个以上, 则在操作数之间要
2、用逗号“,”隔开 (乘法指令和除法指令除外 )。,5,1. 先通读指令,了解有哪些类型、基本操作情况、使用场合。个人可做些归纳和总结。2. 阅读书中或别人的有关程序,其中的应用技巧,必要时再回来查有关内容。3. 自己编写程序,上机实验,体会指令的作用和编程技巧。4. 参与实际项目,在实战过程中使用和提高。,掌握熟悉指令的一些方法,80C51指令中使用的符号的意义作简要说明:,Rn: 表示当前工作寄存器R0R7中的任一寄存器n=07。 Ri: 可用作间接寻址的寄存器,只能是R0, R1 两个 寄存器,i=0,1。 direct: 8位直接地址,在指令中表示直接寻址方 式,寻址范围256个单元。#
3、data: 8位立即数。#data16:16位立即数。,addr16:表示16位目的地址,主要用于LCALL和 LJMP指令中。 addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。 rel: 相对转移指令中的偏移量,为8位带符号补码。 DPTR: 数据指针。 bit: 内部RAM(包括专用寄存器)中的直接寻址位。 A: 累加器。 ACC: 直接寻址方式的累加器。,B:寄存器B。C :进位标志位,也称为累加位。/ :加在位地址的前面,表示对该位状态取反。:间接寻址寄存器的前缀标志。(X):某寄存器或某单元中的内容。(X):由“X”间接寻址单元中的内容。:箭头左边的内容被箭头右
4、边的内容所取代。,所谓寻址方式, 就是寻找操作数地址的方式, 在用汇编语言编程时, 数据的存放、传送、 运算都要通过指令来完成。 编程者必须自始至终都要十分清楚操作数的位置, 以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。,3.2 80C51 单片机指令寻址方式,在 MCS -51单片机指令系统中, 有以下7种寻址方式: (1) 立即寻址;(2) 直接寻址;(3) 寄存器寻址;(4) 寄存器间接寻址;(5) 基址寄存器加变址寄存器间接寻址;(6)位寻址(7)指令寻址,绝对寻址 相对寻址,1. 直接寻址方式,定义:指令
5、中操作数直接以存储单元地址的形式给出。 例如:MOV A , 3AH 特点:指令中含有操作数的地址。该地址指出了参与操作的数据所在的字节单元地址或位地址。计算机执行它们时便可根据直接地址找到所需要的操作数。 寻址范围:片内RAM(低128字节)、专用寄存器。,2. 立即寻址方式,定义:将立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。 例如 MOV A , #3AHMOV DPTR, #data16 特点:指令中直接含有所需的操作数。该操作数可以是8位的,也可以是16位的,常常处在指令的第二字节和第三字节的位置上。立即数通常使用#data或#data16表示,在立即数前面加“#”标
6、志,用以和直接寻址中的直接地址(direct或bit)相区别。,定义:操作数在寄存器中,只要指定了寄存器就能得到操作数。 例如: MOV A,R0 特点:由指令指出某一个寄存器的内容作为操作数。存放操作数的寄存器在指令代码中不占据单独的一个字节,而是嵌入(隐含)到操作码字节中。寻址范围:四组通用寄存器Rn(R0R7)、部分专用寄存器( A, B, DPTR, CY)。,3. 寄存器寻址方式,4. 寄存器间接寻址方式,定义:指令给出的寄存器中存放的是操作数据的单元地址, 这种寻址方式称为寄存器间接寻址。 例如: MOV A, R0 特点:指令给出的寄存器中存放的是操作数地址。寄存器间接寻址是一种
7、二次寻找操作数地址的寻址方式,寄存器前边必须加前缀符号“”。不能用于寻址特殊功能寄存器SFR。,寻址范围: 1、对于内部RAM低128单元访问(只能使用R0或R1作间 址寄存器) 2、对于外部RAM访问(使用DPTR作间址寄存器)。 3、对于外部低256单元RAM的访问,除可以使用DPTR外,还可以使用R0或R1作间址寄存器(先确定高8位地址给P2)。,4. 寄存器间接寻址方式,为区分以上四种寻址方式,现在列出四种语句,1 . MOV A, #30H ;A30H;最后A中的数据为 30H如果30H单元存入的数据为 0FFH 2 . MOV A, 30H ;A(30H) ;最后A中的数据为 0F
8、FH3 . MOV R1, #30H ;R130HMOV A, R1 ;A(R1) ;A30H;最后A中的数据为 30H4 . MOV R1, #30H ;R130HMOV A, R1 ;A(R1) ;A(30H);最后A中的数据为 0FFH,5. 变址寻址方式,定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。这种寻址方式称为基址加变址寄存器间接寻址,简称为变址寻址。例如:MOVC A, A+DPTR ;A(A)+(DPTR)MOVC A, A+PC ; A(A)+(PC)JMP A+DPTR ; PC(A)+(DPTR),特点:指令操作码中隐
9、含作为基址寄存器用的DPTR(或PC )和作为变址用的累加器A。在执行变址寻址指令时,80C51单片机先把基地址( DPTR或PC 的内容)和地址偏移量(A的内容)相加,以形成操作数地址,再由操作数地址找到操作数,并完成相应的操作。变址寻址方式是单字节指令。寻址范围:只能对程序存储器ROM进行寻址,主要用于查表性质的访问。,5. 变址寻址方式,6. 位寻址方式,定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。 例如: MOV C,3AH 特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。 寻址范围: 位寻址区 20H2FH共16个单
10、元里128位地址(00H7FH) 21个特殊功能寄存器中的11个可位寻址的寄存器里共82位80H(P0) 、 88H(TCON)、90H(P1) 、 98H(SCON) 、 0A0H(P2) 、0A8H(IE少2位) 、0B0H(P3) 、 0B8H(IP少3位) 、0D0H (PSW少1位) 、0E0H (ACC)、0F0H(B)。,寻址形式: (1) 用直接位地址:MOV C,8CH (2) 用单元地址加位序 MOV C,88H.4 ;88H+4H=8CH (3) 用位名称:SET TR0 ;启动定时器0 (4) 用寄存器名加位序:MOV C,TCON.4 ;,6. 位寻址方式,一绝对寻址
11、,绝对寻址是在指令的操作数中直接提供目的位置的地址或地址的一部分。长转移和长调用提供目的位置的16位地址绝对转移和绝对调用提供目的位置的16位地址的低11位,7. 指令寻址,二 相对寻址方式,定义:将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字节给出的偏移量(rel)相加,形成新的转移目标地址。称为相对寻址方式。 例如: SJMP rel ; PC(PC) + 2 + rel 特点:相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。目的地址=指令地址(PC)指令字节数偏移量(rel),寻址范围:只能对程序存储器RO
12、M进行寻址。相对地址偏移量(rel )是一个带符号的8位二进制补码,其取值范围为128127(以PC为中间的256个字节范围)。,相对寻址方式,总结: 7 种寻址方式及使用空间,3.3 80C51 单片机指令分类(共有111条),按指令的功能, 80C 51 指令系统可分为下列 5 类:数据传送类(29条)算术运算类(24条)逻辑运算及移位类(24条)位操作类(17条)控制转移类(17条),1. 单字节指令单字节指令格式由8位二进制编码表示, 例如: CLR AE4H2. 双字节指令双字节指令格式由两个字节组成, 操作码和操作数, 例如: MOV A, 10H74H 10H 3. 三字节指令三
13、字节指令格式中, 第一个字节为操作码, 后两个字节为操作数,例如: MOV 40H, 30H75H 40H 30H,3.3.1 数据传送类指令(29条),MCS -51传送指令示意图,一数据传送指令 以助记符MOV为基础,分成: 片内数据存储器传送指令 片外数据存储器传送指令 程序存储器传送指令,1片内数据存储器传送指令MOV 指令格式:MOV 目的操作数,源操作数 其中: 源操作数可以为A、Rn、Ri、direct、#data 目的操作数可以为A、Rn、Ri、direct,(1)以A为目的操作数MOV A,Rn ;A (Rn)MOV A,direct ;A(direct)MOV A,Ri ;
14、A(Ri)MOV A,#data ;A #data (2)以Rn为目的操作数MOV Rn,A ;Rn (A)MOV Rn,direct ;Rn (direct)MOV Rn,#data ;Rn #data,(3)以直接地址direct为目的操作数MOV direct,A ;direct ( A)MOV direct,Rn ;direct (Rn)MOV direct,direct ;direct (direct)MOV direct,Ri ;direct (Ri)MOV direct,#data ;direct #data (4)以间接地址Ri为目的操作数MOV Ri,A ;(Ri) ( A)
15、MOV Ri,direct ;(Ri) (direct)MOV Ri,#data ;(Ri) #data,(5)以DPTR为目的操作数MOV DPTR,#data16 ;DPTR #data16,注意,源操作数和目的操作数中的Rn和Ri不能相互配对。如不允许有“MOV Rn,Rn”,“MOV Ri,Rn”这样的指令,在MOV指令中,不允许在一条指令中同时出现工作寄存器,无论它是寄存器寻址还是寄存器间接寻址。,例3-1 设内部RAM中30H的内容为40H,40H单元的内容为10H,P1口作为输入口,其输入数据为0CAH,分析下面程序段的执行结果。,MOV R0, #30H ;单元地址以立即数形式送入R0 MOV A, R0 ;以R0间接寻址将30H单元内容送A,所送内容为40H,