第4章 51内核单片机汇编语言程序设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、普通传送指令 片内RAM传送指令MOV 回忆操作数描述符:direct,Rn,@Ri,#data,DPTR等。 1)以A为目的操作数的传送指令 MOV A,#data MOV A,direct ;A←data ;A←(direct) ;A←(Rn) ;A←((Ri))
MOV A,Rn
MOV A,@Ri
程序存储器
PC+1 PC
52H 74H
立即数 操作码
A
52H
12
• 例如:MOV DPTR, #5678H DPTR由两个特殊功能寄存器DPH和DPL组成
程序存储器
SFR
PC+2 PC+1 PC
56H 78H 90H
高位立即数 低位立即数 操作码
DPH DPL
注意:1.只有源操作数能使用立即寻址方式。 2.立即数长度必须小于或等于目的操作数的长度。
[标号:] 操作码助记符 [目的操作数][,源操作数] [;注释]
8
描述符号: Rn —— 工作寄存器R0 ~ R7 Ri —— 间接寻址寄存器R0、R1
Direct —— 直接地址,包括内部128B RAM单元地址、
所有SFR地址。 #data —— 8位立即数 #data 16 —— 16位立即数 addr 16 —— 16位目的地址
32C8H
2FH
DPH DPL
32H A5H
32A5H
ALU 32A5H+23H=32C8H
19
4.2.6 相对寻址
• 用于相对转移指令中 • 以当前PC值作为基地址,与指令中给定的相对偏移量rel相加, 以所得之和作为目的位置的地址 • 当前PC值 =源地址+转移指令所占的字节数 (实际上是转移指令的下一条指令的地址) • rel:以补码表示的有符号单字节数(-128~127),负数表示从 当前地址向下转移,正数表示从当前地址向上转移。
程序存储器
2052H +08H=205AH
21
• 例如:JZ F4H ; rel为负数,从当前地址向下转移
当A=0时, PC←PC+2+rel //转移 当A≠0时,PC←PC+2 //程序顺序执行
程序存储器
PC+2
PC+1 PC
2052H
2051H 2050H F4H 60H
偏移量
PC rel=F4H 2052H 2046H
2)以Rn为目的操作数的传送指令
MOV Rn,#data MOV Rn,direct MOV Rn,A ;Rn←data ;Rn ←(direct) ;Rn← A
26
3)以direct为目的操作数的传送指令 MOV direct,#data MOV direct,direct MOV direct,A ; MOV direct,Rn MOV direct,@Ri MOV @Ri,#data MOV @Ri,direct MOV @Ri,A (direct)← data (direct)← (direct ) (direct)← (A) (direct)← (Rn ) (direct)← ((Ri)) ;(Ri)← data ;(Ri)←(direct) ;(Ri)←(A)
两次扫描过程。
第一次扫描:检查语法错误,确定符号名字;
建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。 第二次扫描:在第一次扫描基础上,将符号地址转换成地 址(代真);
利用操作码表将助记符转换成相应的目标码。
5
源程序
ORG 1000H
目标程序
地址
1000 1002
第一次汇编
A82F 7A00
4)以@Ri为目的操作数的传送指令
5)以DPTR为目的操作数的传送指令
MOV DPTR,#data16
;唯一的16位数据传送指令。
27
注意:
1)在数据传送指令中目的操作数和源操作数中不能 同时出现工作寄存器。
2)SFR只能用直接寻址方式访问。
3)片内RAM高128B(80H-FFH)只能用寄存器间 接寻址方式访问。 MOV Rn,Rn × 【例4-1】写出将R0的内容送到 R5中的程序段。 MOV @Ri, @Ri × MOV A,R0 MOV Rn, @Ri × MOV R5,A × MOV #data, A
1
第4章 51内核单片机汇编语言程序设计
4.1、汇编指令格式 4.2、寻址方式 4.3、指令系统 4.4、汇编程序常用伪指令 4.5、汇编语言程序设计
2
第四章 51内核单片机汇编语言程序设计
一、基本概念
• 指令——使单片机完成基本操作的命令。
• 程序——完成某项特定任务的指令的集合。
程序设计语言: 机器语言: 用二进制代码表示指令和数据。 汇编语言: 用助记符表示指令操作功能,用标号表示操作对象。
$ —— 当前指令地址
10
4.2 寻址方式
必须掌握
• 寻址方式——寻找操作数或寻找操作数所在存储 单元地址的方式 • 共七种寻址方式: 立即数寻址
寄存器寻址
直接寻址
寄存器间接寻址
变址寻址 相对寻址 位寻址
11
4.2.1 立即(数)寻址
• 操作数以常数的形式直接出现在指令中,用“#”作前缀; • 该常数与操作码一起存放在ROM中,可以立即得到并执行。 • 例如:MOV A,#52H
高级语言: 独立于机器,面向过程,接近自然语言和数学表达式。
3
汇编程序功能 汇编指令与机器码指令有一一对应的关系。
汇编程序是一种翻译程序,将源程序翻译成目标程序。
源程序 汇编 (翻译) 目标程序
(汇编指令程序)
汇编的两种方式 • 手工汇编 • 机器汇编 (常用)
(机器语言程序)
4
关于机器汇编的说明
程序存储器 内部RAM
63H PC+1 PC 63H 74H
直接地址 操作码
XX
A
XX
• MOV P0,A
MOV 80H,A
(P0代表符号地址,是直接寻址方式)
16
4.2.4 寄存器间接寻址
• 指令中寄存器的内容作为操作数存放的地址 • 间接寻址寄存器前用“@”表示前缀 •可用作地址指针的工作寄存器是R0、R1,以及DPTR •例如:MOV A, @R1; A←((R1))
20
• 例如:JZ 08H ; rel为正数,从当前地址向上转移
当A=0时, PC←PC+2+rel //转移 当A≠0时,PC←PC+2 //程序顺序执行
PC
205AH
XX
PC
PC+2
PC+1 PC
2052H
2051H 2050H 08H 60H
偏移量 操作码
rel=08H ALU
2052H 205AH
29
【例4-2】试编写一
程序段,实现将片外 RAM 地址为01E0H 开始的16个单元中的 内容传送到片内扩展
参考程序为: MOV R2,#10H
MOV P2,#01H
MOV R0,#0E0H MOV DPTR,#04FFH LOOP:ORL AUXR,#00000010B
RAM 地址为04FFH MOVXD3 A,@R0 D7 D6 D5 D4 D2 D1 D0 开始的单元中。 ANL AUXR,#11111101B T0x1 T1x12 UART_ BRTR S2SMOD BRT EXTRAM S1BRS MOVX @DPTR ,A 2 M0x6 x12 INC R0
24
4.3 指令系统
4.3.1 数据传送指令
数据传送指令共29条,
包括:普通传送指令、数据交换指令和堆栈操作指令
特殊功能 MOVC 寄存器
SFR
MOVX
MOV PUSH POP XCH XCHD 扩展数 据存储 器
RAM
程序存 储器 ROM
片内RAM
128字节
注意:该类指令只有以A为目的操作数的指令影响PSW 中的P标志位,其它数据传送指令对各标志位无影响。 25
addr 11 —— 11位目的地址
rel —— 用补码表示的 8位相对偏移量
bit —— 可直接位寻址的位
9
/ bit —— 指定位求反,再参与逻辑操作,但取反后不影 响该位的原值 (x)—— x中的内容 ((x))—— x中的地址中的内容 → —— 表示操作流程,将箭尾一方内容送入箭头所指 一方的单元中去
18
4.2.5 变址寻址
• • • • 操作数地址 = 变地址 + 基地址 基地址寄存器: DPTR 或 PC ; 变址寄存器: A 该寻址方式常用于访问程序存储器,查表。 例如:MOVC A,@A + DPTR 设DPTR=32A5H,A=23H
程序存储器
A SFR
PC
10010011
操作码
2FH 23H
• 指令中直接给出操作数的地址,数据存放在该地址对应的存 储单元中。 • 直接寻址方式可以访问的范围: 片内RAM低128B单元(00H——7FH) SFR(既可用单元地址形式给出,也可用寄存器符号 的形式给出) 注意:直接寻址方式是访问特殊功能寄存器的唯一方法。
15
4.2.3 直接寻址
• 例如:MOV A,63H
INC DPTR DJNZ R2,LOOP
EXTRAM=1 时,访问片 外扩展RAM
30
程序存储器传送指令MOVC(查表指令)
MOVC A,@A + DPTR (A)+ ( DPTR)或PC当前值=一个 16位的地址,将该ROM地址中 MOVC A, @A + PC 的内容传送给 A。 MOVC 含义是传送常数。 以DPTR为基地址的指令,可在ROM的64KB范围内查 表;(常用) 以PC为基地址的指令只能在(PC)+ 1为基点的256B范 围内查表;(不推荐) 使用第一条指令前,需事先将表首地址存入DPTR中,
程序存储器 内部RAM
PC
1110011 1
操作码
30H
58H
R1
30H
A
58H
17
使用该方式访问数据存储器时注意:
访问片内RAM只能用R0和R1作指针;
若片内扩展RAM或片外RAM仅有256B单元时,既可以 用R0或R1作指针间接访问,也可用DPTR作指针间接访 问;大于256B时只能以DPTR作指针间接访问。
13
4百度文库2.2 寄存器寻址
• 操作数存放在R0 ~ R7、A或DPTR中; • B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令
中是直接寻址。
• 其他SFR的寻址方式不属于寄存器寻址。 •例如:MOV A,R5
程序存储器 内部RAM
PC
11101 101
操作码
R7 R6 R5 XX
A
XX
14
4.2.3 直接寻址
STC系列单片机采用了80C51内核,其指令集与
MCS—51系列单片机完全相同,本章介绍的指令系 统可适用于所有51内核的单片机。
7
4.1 汇编指令格式
指令的构成 指令 = 操作码 + 操作数 操作码——表示该指令所能执行的操作功能。
操作数——表示参加操作的数的本身或操作数所在的地址。 汇编语言指令基本格式
第二次汇编
A82F 7A00
START:MOV R0,2FH MOV MOV MOV INC SJMP R2,#00H A,@R0 R3,A R3 NEXT
1004
1005 1006
E6
FB 0B
E6
FB 0B
1007
1009 100A
80NEXT
08 B644NEXT
8005
08 B64401
LOOP:INC R0
操作码
ALU PC 2046H XX 2052H +FFF4H=2046H
22
4.2.7 位寻址
• 操作数是二进制位 • 在指令中直接给出位地址,利用位处理器对某一位进行数据
传送、逻辑运算等操作
• 例如:MOV C, 07H; C←(07H)
程序存储器
PC+1 PC
07H A2H
操作码 07 20H X 00
28
扩展数据存储器传送指令
对片内扩展RAM或片外扩展RAM及外部接口电路进行数 据传送的相关指令:
MOVX A,@Ri
(读) ;A←((Ri))
MOVX A,@DPTR(读) ;A←((DPTR)) (写) ; ((Ri)) ←A MOVX @Ri,A MOVX @DPTR,A(写) ; ((DPTR)) ←A 执行过程中会使/WR、/RD有效。 注意: 1)通过DPTR间接寻址,可以对整个64KB片外RAM访问。 2)通过@Ri间接寻址,只能对扩展RAM的低256字节访问, 如果地址范围大于256B时,应谨防地址冲突。
CJNE INC @R0,#44H,NEXT R2
100D
100E 1010
0A
DBLOOP 8A2A
0A
DBF9 8A2A
NEXT:DJNZ R3,LOOP
MOV SJMP 2AH,R2 $
1012
80FE
80FE
END
6
指令的三种属性
• 时间属性:指一条指令执行完毕所需要的时间 • 空间属性:指一条指令存储于程序存储器中所占的字节数 • 功能属性:指一条指令所对应的一个特定的操作功能
SFR
PSW X C
23
两种位寻址区:
(1)内部RAM中的位寻址区:字节地址为20H~2FH; (2)SFR的可寻址位。 位地址的几种表示方法: 1)直接使用位地址;如:PSW的位6可表示为0D6H
2)字节地址带位号;
3)SFR名带位号; 4)位符号地址表示;
或0D0H.6
或PSW.6 或AC
相关文档
最新文档