单片机原理及应用 蔡启仲 第3章 51单片机的指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
3.3 51单片机的指令集
按照指令的功能分类,51单片机指令系统的111条指令分
为数据传送类指令、算术运算类指令、逻辑运算类指令、控
制转移类指令、位操作类指令。
3.3.1 数据传送类指令
数据传输类指令又可分为: 单片机内部数据的传送指令;
累加器A与片外RAM或外部扩展接口部件的数据传送指令;
查表指令。
(3) 程序存储器:使用DPTR作为间接寻址寄存器。 (4) 片外扩展的低256B单元地址空间:可以使用DPTR、R0和R1作为间接寻 址寄存器;或只扩展256B单元,使用R0和R1作为间接寻址寄存器。 (5) 堆栈区:以堆栈指针SP作为间接寻址寄存器。
13
5. 基址+变址寻址方式
基址+变址寻址方式:指令中有操作数@A+PC或@A+DPTR,程序计数器
16位地址,可表示64KB范围内的地址单元的寻址,用于LCALL和LJMP指令中
11位地址,2KB范围寻址,用于 ACALL和AJMP指令, 16位地址指针寄存器DPTR的数据传 输指令中
8位直接地址,可以是片内RAM区的某一单元或某一特殊功能寄存器的地址
带符号的8位地址偏移量,rel地址偏移量的范围:–128~ +127,用于SJMP和条件转移指令中
位寻址的寻址范围如下。
(1) 片内RAM中的位寻址区。位单元地址范围:00H~7FH
(2) 可位寻址的特殊功能寄存器。可以直接使用位单元的符号,比如第2条 指令中的TR0,参见第2章表2–7的特殊功能寄存器中的位单元地址分
布。
15
7. 相对寻址
相对寻址用于访问程序存储器,只出现在转移指令中。以PC的当前值 加上指令中给出的相对偏移量(rel)形成转移地址。其中,rel是一个带符号的
单片机原理及应用
第3章 51单片机的指令系统
第 3章
内容简介 3.1 51单片机的汇编指令
目录
3.1.1一个简单的程序示例 3.1.2 3.1.3 3.1.4 指令格式 指令类型 常用符号说明
3.2 51单片机指令的寻址方式 3.3 51单片机的指令集
3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 数据传送类指令 算术运算指令 逻辑运算及移位类指令 控制转移类指令 位操作类指令
DPTR, #8000H ; DPTR←8000H,DPTR中的内容为8000H
10
3. 寄存器寻址
寄存器寻址方式:指令中的源操作数是寄存器,源操作数的内容存放在寄存 器内。寄存器寻址一般用于访问选定的通用寄存器R0~R7,以及A、B和DPTR。 源操作数和目的操作数均为寄存器寻址方式的指令都是单字节指令。
位单元的8位地址,位寻址区的直接寻址位,表示片内RAM中可寻址位和SFR中可寻址位的 位单元的内容只有“0”和“1”两种状态,作为源操作数在注释和说明时不加括号
X是一个地址,(X)是X地址单元中的内容。(X)只用于对指令的注释和说明
X是一个地址,X地址单元中的内容作为地址指针,即(X)仍然是一个地址,((X))是(X)地址指针所 指向的地址单元中的内容。((X))只用于对指令的注释和说明
7
3.1.4 常用符号说明
符号
Rn Ri #data #data16 addr16 addr11 direct rel bit (X) ((X)) → $ /
含 义
当前选定寄存器组的寄存器Rn,n=0~7 作为间接寻址的地址指针Ri,i=0或1 8位立即数,8位立即数的数据范围:00H~FFH 16位立即数,16位立即数的数据范围:0000H~FFFFH
3.1.2
指令格式
指令的表示方法就是指令格式。51单片机指令主要由操 作码(指令助记符)字段和操作数字段组成。 指令格式:操作码 [操作数1] [,操作数2] [,操作数3]
程序是指令的有序结合,指令在汇编程序中可以增加标
号字段和注释字段,其格式如下: [标号:] 操作码 [操作数1] [,操作数2] [,操作数3] [;注释]
PC或数据指针DPTR作为基址寄存器,累加器A作为变址寄存器,基址寄存器
和变址寄存器的内容相加形成读取程序存储器数据的16位地址,用于访问程 序存储器中的数据表格。
例3–4 执行指令: MOVC A,@A+PC ;((A)+(PC))→A,@A+PC为源操作数
MOVC A,@A+DPTR
;((A)+(DPTR))→A,@A+DPTR为源操作数
14
6. 位寻址
51单片机有一个布尔处理机,可以对8位字节中的位单元进行操作。位 寻址方式:对位单元的寻址。
除了位判断转移指令外,位操作指令的源操作数和目的操作数都是位单
元。 例3–5 执行指令:
MOV C, 40H
SETB TR0
;该指令的功能是把40H位单元中的状态送进位位Cy
;该指令的功能是把TR0位单元中的状态置为“1”状态
A←(20H) A←(A)+(30H) R1←(A) 清累加器A A←(A) 程序流程图
按照图3–1编写汇编程序源代码如下:
ORG LJMP ORG MAIN: MOV CLR ADD MOV CLR ADDC MOV SJMP END
5
0000H MAIN 0030H A, 20H C A, 30H R1, A A A, #00 R0, A $
习题
2
内容简介
本节介绍51单片机的指令系统。 重点介绍指令格式,常用符号,寻址方式,指令的 分类,每条指令的功能。 要求掌握指令的功能分类,每条指令属于何种指令功 能的类别,每条指令操作数的寻址方式。能够区分字节指 令和位指令。
3.1 51单片机的汇编指令
3.1.1 一个简单的程序示例 例3–1 将内部RAM中的20H和30H单元的无符号数相加,结果存入R0(高位) 和R1(低位)中。 开始
例如,执行指令: MOV A, R0 INC MOV R0 A, 30H ;A←(R0),指令中的R0为源操作数,A为目的操作数 ;(R0)+1→R0,指令中的R0是源操作数,也是目的操作数 ;A←(30H),指令中的30H为源操作数,A为目的操作数
11
4. 寄存器间接寻址
寄存器间接寻址:指令中的某一个寄存器的内容作为操作数地址的寻址方 式,即寄存器的内容作为地址指针,操作数的单元地址是通过寄存器间接得到。 寄存器间接寻址方式中,必须在寄存器的名称前面加前缀标志“@”。访 问内部RAM或外部数据存储器和其它扩展部件的低256个字节时,只能采用R0 或R1作为间接寻址寄存器;访问外部扩展的64K单元地址空间和程序存储器采 用DPTR作为间接寻址寄存器。 例3–2 已知R0中存放片内RAM地址65H,数据指针DPTR中存放片外RAM地址 8000H,地址65H单元中的数据为30H,8000H单元中的数据为59H,执行指令:
6
3.1.3 指令类型 51单片机汇编语言有42种操作码(参见附录A),用来 描述33种操作功能。操作码与寻址方式组合可得到111条
指令。
(1) 按指令所占字节数分类,共有单字节指令(49条)、双字 节指令(45条)和三字节指令(17条)。 (2) 按指令执行时间分类,共有单周期指令(64条)、双周期指 令(45条)和四周期指令(2条:乘法指令和除法指令)。 (3) 按功能分类,51单片机指令系统可分为:数据传送类指 令(29条)、算术运算类指令(24条)、逻辑运算类指令(24 条)、控制转移类指令(17条)、位操作类指令(17条)。
(4) 以寄存器间接地址为目的操作数的指令
例3–9 若(A)=20H,(R0)=42H,(32H)=46H,(42H)=52H,执行以下指令: MOV @R0, A MOV @R0, 32H MOV @R0, #0D5H
19
;((R0))=(42H)=(A)=20H,42H单元的内容被刷新 ;((R0))=(42H)=(32H)=46H,42H单元的内容被刷新 ;((R0))=(42H)=D5H,42H单元的内容被刷新
17
3.3.1 数据传送类指令
1.内部数据的传送指令 (1) 以累加器A为目的操作数的指令,即累加器A为目的地址单元 例3–6 将立即数35H送入片内30H单元,可执行以下指令: MOV A, #35H ;累加器A为目的地址单元,35H→A MOV R0, #30H ;R0为目的地址单元,30H→R0 MOV @R0, A ;@R0为目的地址单元,(R0)=30H,(30H)→A 也可执行以下这一条指令达到目的: MOV 30H, #35H ;35H→30H (2) 以寄存器Rn为目的操作数的指令
8位二进制数,以补码形式置于操作码之后存放。程序的转移范围以PC当前
值为中心,介于–128~+127之间。
例如,执行指令:
JC rel 设rel=85H,Cy=1,这是一条以Cy状态为条件的转移指令,指令为两字
节指令,CPU取出第二个字节时,PC当前值为原PC值加2。由于Cy=1,程序
转向(PC)+2+rel程序存储器的目的地址单元去执行。注意,此时rel=85H为负 值。
;ORG为伪指令,程序从0000H开始执行 ;长跳转指令,跳到标号MAIN处执行 ;主程序起始地址0030H ;20H单元中的内容送至累加器A中 ;清进位位Cy ;30H中的内容与累加器A的内容相加, ;结果存放在累加器A中 ;将累加器A中的内容传送给寄存器R1 ;清累加器A ;带进位加法指令 ;将累加器A的内容传送给R0 ;相对转移指令,$是当前行指令的地址 ;结束,伪指令
例3–7 若(A)=20H,(20H)=F0H,执行以下指令:
MOV R0, A MOV R0, 20H
18
;(R0)=20H ;(R0)=F0H ;(R6)=A5H
MOV R6, #0A5H
3.3.1 数据传送类指令
(3) 以直接地址为目的操作数的指令 例3–8 设66H单元中的内容为EAH,执行下面指令: MOV 36H, #66H MOV R1, 36H MOV 7EH, @R1 MOV 38H, 7EH ;66H→36H,(36H)=66H ;(36H)→R1,(R1)=66H ;((R1))→7EH,(7EH)=(66H)=EAH ;(7EH)→38H,(38H)=(7EH)=EAH
MOV
A,@R0
;A←((R0)),执行指令:(A)=30H,@R0为源操作数
MOVX A,@DPTR ;A←((DPTR)) ,执行指令:(A)=59H
12
寄存器间接寻址的寻址范围如下:
(1) 51单片机片内RAM的低128B单元,52单片机片内RAM的256B单元,应 用R0和R1作为间接寻址寄存器。 (2) 片外扩展的 64KB单元地址空间:使用DPTR作为间接寻址寄存器。如果 P2口输出的高8位地址值是一个确定地址值,也可以使用R0和R1作为间 接寻址寄存器。 例3–3 已知片外RAM的0118H中的内容为58H,执行指令: MOV P2, #01H ;设置51单片机地址总线的高8位地址为01H MOV R0, #18H ;设置51单片机地址总线的低8位地址为18H MOVX A, @R0 ;A←((R0)+0100H)=(0118H),(A)=58H
按箭头指示方向传送内容,主要用于对指令的注释和说明 当前指令所在地址,用于无条件转移指令中
在位单元之前,表示该位状态取反参与操作,但位单元本身状态不变,用于位操作指令中
间接寻址寄存器或基址寄存器的前缀,用于寄存器间接寻址和基址+变址寻址方式的指令中
@
8
3.2 51单片机指令的寻址方式
51单片机指令的操作数寻址方式主要有7种,分别为直接 寻址、立即寻址、寄存器寻址、寄存器间接寻址、基址+变
址寻址、位寻址、相对寻址。
1. 直接寻址 直接寻址方式:指令中的源操作数是操作数的单元地址, 该单元地址指出了参与运算或传送的数据所在的字节单元地 址或位单元地址。 例如,已知(30H)=FFH,执行指令: MOV A, 30H ;A←(30H),执行结果:(A)=FFH
9
2. 立即寻址
立即寻址方式:指令中含有立即数,立即数作为源操作数,即指令中的立 即数以指令操作数的形式存放于程序存储器中,为了与直接寻址指令中的直接 地址相区别,需要在操作数前面加前缀标志“#”;当立即数是以字母开头的 数时,前面必须加0,如#0FEH。 例如,执行指令: MOV MOV A, #0FEH ;A←FEH,A为目的操作数,A中的内容为FEH