第三章 8051汇编指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
((x))— 由X地址中的内容为地址,其地址单 元中的内容。
6
汇编语言对不同数制的表示方式
数据的表示方式: 十进制立即数:MOV A,#123 十六进制: MOV A,#7FH 二进制: MOV A,#10011011B 直接地址的表示方式: 十进制立即数:MOV A,123 十六进制: MOV A,7FH 二进制: MOV A,10011011B
注:目的操作数都是A
39
算术运算指令
[2]. 带进位加法指令(4条)
ADDC A, direct ;(A)+(data)+(C)→(A)
ADDC A,#data ;(A)+#data +(C)→(A) ADDC A,Rn ADDC A,@Ri ;(A)+Rn+(C)→(A) ;(A)+((Ri))+(C)→(A)
例如: CLR C
CPL C
SETB P1.2 作业:写出51单片机可位寻址的专用寄存器有哪 些?
17
[7].相对寻址 以PC的内容为基址,加上给出的偏移 量作为转移地址,从而实现程序的转移。这 种寻址方式主要用于转移指令。
例如: S: MOV A,#20 ..... AJMP S
18
软件使用介绍 单片机编程软件:KEIL 电路仿真软件:PROTEUS 电路仿真软件 PCB设计软件
MOV A,#'k'
11
[2].直接寻址 指令中原操作数直接以存储单元的地址 出现。 MOV A,direct 例如: MOV A,68H
12
[3].寄存器寻址 寄存器寻址可以对8个工作寄存器R0-R7进 行操作,也可以对寄存器A、B等进行操作。 例如: MOV R1,#10 MOV A,R1 MOV R2,A
2
从指令执行时间看, 单机器周期指令 64条 双机器周期指令 45条 4机器周期指令 2条
3
汇编指令中常用的一些符号注释
Rn— 选中的工作寄存器是R0-R7中任意一个。 Ri— 选中的寄存器是R0和R1中任意一个。
direct— 内部数据存储单元的8位地址。包含 内部存储单元地址和特殊功能寄存地址。
第三章 8051单片机汇编指令
3.1 MCS-51指令系统概述 对 8051 单片机编程可以使用 机器语言、 汇编语言及高级语言-C语言。但单片机并不 能直接执行汇编语言和高级语言,都必须通过 汇编器“翻译”成为二进制机器码方能执行。
1
指令:就是能完成特定功能的命令。 指令系统:CPU所能执行的各种指令的集 合。 51单片机基本指令共111条,其中: 单字节指令 49条 双字节指令 45条 三字节指令 17条
7
指令格式:
一条汇编语言指令中最多包含 4 个区段, 如下 所示:
[标号:] 操作码 [操作数] [; 注释]
其中,操作数又分为:原操作数和目的操作 目的操作数 源操作数 数;两个操作数之间用‘ , ’分开
例如:
MOV A , #28
8
3.2 MCS-51的寻址方式 寻址方式--就是CPU寻找操作数或操作数 地址的方式。 在 MCS -51单片机指令系统中, 有以下 7 种 寻址方式: (1) 立即数寻址;
(2) 直接寻址;
(3) 寄存器寻址;
9
(4) 寄存器间接寻址; (5) 基址寄存器+变址寄存器间接寻址; (6) 相对寻址;
(7) 位寻址。
10
[1].立即数寻址 指令中原操作数直接以数据出现。为了与直 接寻址方式相区别,在立即数前加上“#” 符号
例如:
MOV A,#0EH
MOV A,#20
规定DPTR或PC为变址寄存器,A为地址 偏移量。 变址寻址方式只能访问程序存储器。
MOVC A,@A+DPTR
MOVC A,@A+PC
15
例如: MOV DPTR,#2000H MOV A,#03H
MOVC A,@A+DPTR
16
[6].位寻址
指令中操作数是8位二进制数中的某一位。
对片内RAM的位寻址区(20H~2FH) 和可位寻址的专用寄存器进行位操作。
得到的商存在累加器A,而余数存在寄存器B中。
当除数B为0时,OV=1,表示除法无意义。 注:AB 连写,中间不加 "," 号
43
算术运算指令
[6]. 加1指令(5条) 加1指令不会对任何标志有影响,如果 原寄存器的内容为FFH,执行加1后,结果 就会是00H。
INC direct
INC @Ri INC Rn INC A INC DPTR
41
算术运算指令
[4]. 乘法指令(1条) MUL AB ;(A)×(B)→(A)和(B) 结果低8位存在累加器A,而高8位存在寄 存器B中。如果OV=1,说明乘积大于FFH, 否则OV=0,但进位标志位CY总是等于0。 注:AB 连写,中间不加 "," 号
42
算术运算指令
[5]. 除法指令(1条) DIV AB ;(A)÷(B)→(A)和(B)
26
数据传送指令
[2]. 以寄存器Rn为目的操作数的指令(3条)
MOV Rn, direct MOV Rn,#data MOV Rn,A ;(data)→(Rn) ;#data→(Rn) ;(A)→(Rn)
注意:MOV Rn,Rn 错误指令
27
数据传送指令
[3]. 以直接地址为目的操作数的指令(5条)
MOV B,R2
MOV R5,B
13
[4].寄存器间接寻址
访问RAM存储器的低128B单元内容,通过 R0和R1作为间接寄存器。 例如: MOV A,@R0 外部数据存储器的空间为64kB,可采用 DPTR作为间址寄存器进行访问,指令如下: MOVX A,@DPTR
14
[5].变址寻址(基地址+变址寄存器间接寻址)
32
数据传送指令
[7]. 堆栈操作类指令(2条) “先进后出”
PUSH direct
;(SP)+1→(SP),( direct )→(SP) POP direct ;(SP)→( direct ),(SP)-1→(SP)
33
数据传送指令
例如 : 进入中断服务子程序时 , 把程序状态寄存器 PSW、 累加器A、 数据指针DPTR进栈保护。设
25
3.3.1 数据传送指令 该类不影响标志C,AC和OV,但可能会 对奇偶标志P有影响。
[1]. 以累加器A为目的操作数类指令(4条)
MOV A, direct
MOV A,#data MOV A,Rn
;(data)→(A)
;#data→(A) ;(Rn)→(A)
MOV A,@Ri
;((Ri))→(A)
30
数据传送指令
[6]. 累加器A与外部RAM传送指令(4条)
MOVX @DPTR,A ;(A)→((DPTR))
MOVX A, @DPTR ;((DPTR))→(A)
MOVX A, @Ri
MOVX @Ri,A
;((Ri))→(A)
;(A)→((Ri))
31
数据传送指令
习题1、下面指令完成什么内容,各指令属于 什么寻找方式 MOV 45H,#20H MOV 46H,#30H MOV A,45H MOV A,# 45H MOV R0,A MOV 46H,@R0 MOV R0,#46H MOVX A,@R0
[8]. 交换指令(3条)
XCH A,Rn ;(A)←→(Rn)
XCH A,@Ri ;(A)←→((Ri))
XCH A, direct ;(A)←→( direct ) [9]. 半字节交换指令(1条)
XCHD A,@Ri ;(A3-0)←→((Ri)3-0)
注:目的操作数都是A
37
数据传送指令
例题1: MOV R6,#45H MOV 30H,#20H XCH A,R6 XCH A,30H
21
PROTEUS 使用 1、打开软件:打开ISIS 软件 2、新建原理图:文件菜单->新建设计 3、添加软件并绘制原理图 4、加载程序文件 ***.HEX文件:双击原理图上的单片 机,在弹出对话框中添加程序文件 5、电路仿真:点击播放键开始仿真
22
3.3 MCS-51指令系统 按指令功能分,指令系统可以分为5大类:
40
算术运算指令
[3]. 带借位减法指令(4条)
SUBB A, direct ;(A)-(data) -(C)→(A) SUBB A,#data ;(A)-#data -(C)→(A) SUBB A,Rn ;(A)-(Rn) -(C)→(A) SUBB A,@Ri ;(A)-((Ri)) -(C)→(A)
[4]. 以间接地址为目的操作数的指令(3条) MOV @Ri, direct
;(data)→((Ri))
MOV @Ri,#data ;#data→((Ri)) MOV @Ri,A ;(A)→((Ri))
注意:MOV @Ri,Rn 错误指令
29
数据传送指令
[5]. 查表指令(2条) 这组指令的功能是对存放于程序存储器 中的数据表格进行查找传送,使用变址寻址方 式: MOVC A,@A+DPTR ;((A)+(DPTR))→A MOVC A,@A+PC ;(PC)+1→PC,((A)+(PC))→A
#data— 指令中的8位常数。 #data16— 指令中的16位常数。
4
addr16— 16位目的地址。
addr11— 11位目的地地址。
@— 间接寄存器寻址或基址寄存器的前缀。
DPTR— 数据地址指针。
bit—直接寻址位地址。
5
A— 累加器A。 B— 寄存器B。 C— 进位标志位CY。
(x)— X地址中的内容。
例题2: MOV 30H,#20H MOV R0,#30H XCHD A,@R0
38
3.3.2 MCS-51算术运算指令 [1]. 加法指令(4条)
ADD A,#data ;(A)+#data→(A) ADD A, direct ADD A,Rn ADD A,@Ri ;(A)+(data)→(A) ;(A)+((Ri))→(A) ;(A)+(Rn)→(A)
19
实例
20
KEIL 使用 1、新建工程:工程菜单->新建工程 2、新建程序文件:1)文件菜单->新建文件; 2)保持文件,输入文件名,后缀 为 ***.a(汇编程序) 或 ***.c(C语言程序) 3、添加程序文件到工程中 4、在程序文件中编写程序 5、编译程序:工程菜单-> Rebuild all target files(重 新编译所有的源文件并且编译应用程序)
当前SP为 60H。则程序段执行完,各寄存器存放
的数据地址=?SP=?
PUSH PSW
PUSH ACC PUSH DPL PUSH DPH 61H=PSW 62H=ACC 63H=DPL 64H=DPH SP=64H
34
数据传送指令
POP ACC
POP DPL
POP DPH POP PSW DPH=(64H) DPL=(63H) ACC=(62H) PSW=(61H)
SP=60H
注:堆栈指令对 A累加器操作时,只能写成“ACC”
35
数据传送指令
习题2、下列程序执行完后,判断各寄存器的 值和SP的值。 MOV SP,#40H MOV A,#20H MOV R0,#4AH PUSH ACC PUSH R0 ADD A,R0 POP ACC POP R0
36
数据传送指令
1、数据传输指令:28条
2、算术运算指令:24条
Байду номын сангаас
3、逻辑运算及移位指令:25条
4、控制转移指令:17条
5、位操作指令:17
共111条指令。
23
数据传输指令码: MOV ; MOVC ; MOVX PUSH ; POP XCH ; XCHD 算术运算指令码: ADD ; ADDC ; INC ; DA ; SUBB ; DEC MUL ; DIV 逻辑运算指令码: CLR ; CPL ; RL ; RLC ; RR ; RRC ; SWAP ANL ; ORL ; XRL ;
MOV direct, direct ;(data)→(data)
MOV direct,#data MOV direct,A ;#data→(data)
;(A)→(data)
MOV direct,Rn
;(Rn)→(data)
MOV direct,@Ri ;((Ri))→(data)
28
数据传送指令
24
控制转移类指令码: AJMP ; SJMP ; LJMP ; JMP JZ ; JNZ ; CJNE ; DJNZ ACALL ; LCALL ; RET ; RETI NOP 位操作指令码: MOV ; CLR ; CPL ; SETB ANL ; ORL JC ; JNC ; JB ; JNB ; JBC
相关文档
最新文档