第3章 微机原理及应用2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回本章
3.2.1 立即寻址
• 指令中直接给出操作数的寻址方式。 例如:MOV P1,# 0FFH MOV DPTR,# 3400H MOV 30H,# 40H;
上述三条指令执行完后,寄存器 P1 中数据为 立即数据 FFH , DPTR 寄存器中数据为 3400H , 30H 单元( 8 位内部数据存储器 RAM 的单元地 址)中数据为立即数40H。
一、内部数据存储器间数据传送指令
1.以A为目的操作数
MOV MOV MOV MOV
A,Rn ;(A)←(Rn) A,direct;(A)←(direct) A,@Ri ;(A)←((Ri)) A,#data;(A)← #data
返回
一、内部数据存储器间数据传送指令
2.以Rn为目的操作数 MOV Rn,A ;(Rn) ← (A) MOV Rn,direct ;(Rn) ←(direct) MOV Rn,#data ;(Rn) ← #data
返回
一、内部数据存储器间数据传送指令
4.以间接地址为目的操作数
MOV @Ri,A ;(Ri) ← (A) MOV @Ri,direct;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data
例如:设(30H)=6FH,R1=40H, 执行:MOV @R1,30H 结果:(40H)=6FH。
外部ROM
… … …
程序2 MOV A,#09H ADD A,#0FH MOVC A,@A+PC 执行结果: (A)=81, (PC)=1FF1H
偏移量=2000H-(1FF0H+1) =0FH
2009H
81
…
4 1 0
92
…
22 12 02
PC 当前PC
2002H 2001H 2000H
…
1FF0H 1FF1H
; (A0~3 ) ; (A0~3)
(Ri0~3) (A4~7)
例:(R0)=20H,(A)=3FH,(20H)=75H (1) 分别执行 XCH A,R0 ;(A)=? (R0)=? XCHD A,@R0;(A)=? SWAP A;(A)=? (2)执行程序段 MOV A,20H XCH A,R0 MOV 20H, A 则(A)=? (R0)= ? (20H)=?
指令格式
LOOP:MOV A,#10H
标号
;(A)
10H
注释
[标号:] 操作码 [目的操作数] [,源操作数] [;注释]
指令中常用符号
(1)Ri和Rn (2)#data (3)#data16 (4)rel (5)addr16 (6)addr11
(7) direct (8)bit (9)@ (10)(X) (11)((X)) (12)
返回本节
3.2.6 相对寻址
•
•
• •
相对寻址用于修改PC值,主要用于实现 程序的分支转移。 以当前程序计数器 PC 的内容 ( 相对转移 指令所在地址+转移指令字节数)为基础, 加上指令给出的偏移量 rel ,而构成实 际操作数地址的寻址方式。 当前PC值=源地址+转移指令字节数。 偏移量rel为单字节有符号数,以补码形 式表示,范围是-128~+127
返回本节
一、内部数据存储器间数据传送指令
MOV A,direct MOV A,#data MOV A,Rn MOV A,@Ri
直接地址 direct
MOV @Ri,direct MOV @Ri,#data MOV @Ri,A
累加器 A
直接地址 direct
间接地址 @Ri
寄存器 Rn
立即数 #data
PSW为直接寻址寄存器的符号地址
MOV A,40H ;(A)←40H
40H为直接给出的内部RAM的地址
3.2.3 寄存器寻址
• 以通用寄存器的内容为操作数的寻址方式。 • 通用寄存器指A、B 、DPTR、C以及R0~ R7 。 例如: MOV A ,R0
R0 30H 30H A 30H
返回本节
3.2.4 寄存器间接寻址
PC (2002H) 200AH
…
3.2.7 位寻址
• •
位寻址其实是一种直接寻址方式,不过其地址 是位地址。 位寻址只能对有位地址的单元作位寻址操作。 例如:SETB 10H ;将位地址为10H的位置1
22H单元的D0位的位地址为10H,若22H单元中存放着 数据40H执行上述指令后(22H)=41H。
返回本节
3.2.2 直接寻址
• 指令中直接给出操作数地址的寻址方式。 例如:MOV A,30H ;(A)←(30H)
30H为直接给出的内部RAM的地址
片内RAM
30H
34H 34H
A
34H
• 能进行直接寻址的存储空间有 SFR 寄存器和 内部数据RAM。
例如: MOV D0H,#20H
MOV PSW,#20H;(PSW)←20H
83H 0FH 24H 09H 74H
外部ROM 偏移量=表首地址-(MOVC指令所在地址+1)
…
四、数据交换类指令
l 字节交换 XCH A,Rn XCH A ,direct XCH A,@Ri l 半字节交换 XCHD A,@Ri SWAP A
;(A) ;(A) ;(A)
(Rn) (direct) ((Ri))
• 看这个问题,要求从30H单元开始,取20个数, 分别送入A累加器 MOV A,30H MOV A,31H … MOV R7,#20 MOV R0,#30H LOOP:MOV A,@R0 ; (A) ((R0)) INC R0 ;寄存器内容加1 DJNZ R7,LOOP ;直接寻址字节内容 减1不为零转移 (p69)
寄存器 DPTR
MOV Rn,A MOV Rn,direct MOV Rn,#data
MOV direct,A MOV direct,@Ri MOV DPTR,#Data MOV direct,#data MOV direct,Rn MOV direct2,direct1
图3-6 MCS-51单片机片内数据传送图
返回本节
• 寄存器间接寻址 :以寄存器中内容为地址, 以该地址中内容为操作数的寻址方式。 • 间接寻址的存储器空间包括内部数据 RAM和外部数据RAM。 • 能用于寄存器间接寻址的寄存器有 R0 , R1,DPTR(数据指针寄存器) ,SP(堆 栈指针)。SP仅用于堆栈操作。
MOV A,@R0
执行示意图
返回
一、内部数据存储器间数据传送指令
5.以DPTR为目的操作数
MOV DPTR,#data16 ;(DPTR) ← #data16
例如:执行 MOV DPTR,#2000H 结果:(DPTR)= 2000H。
返回
例:(30H)=40H,(40H)=10H,(P1)=0CAH 执行: MOV R0,#30H MOV A,@R0 MOV R1,A MOV 30H,@R1 MOV @R1,P1 MOV P2,P1 问: (30H)=? (40H)=? (P1)=? (P2)=? (R1)=? (A)=?
3.1 汇编语言与指令格式
• 机器语言汇编语言
74H 09H MOV A,#09H • 汇编 人工汇编 机器汇编
返回本章
机器语言 汇编语言
指令格式
目的操作数
源操作数
例如:MOV P1,#0FFH
操作码
• 在 MCS-51 指令中,一般指令主要由 操作码、目的操作数、源操作数组成。
( 1 )操作码指明执行什么性质和类型的操作。例 如,数的传送、加法、减法等。 (2)目的操作数指定操作结果存放的地址。 ( 3 )源操作数指明操作的对象或者是操作数所在 的地址。
片内RAM R0 30H 30H A 34H
34H
3.2.5 变址寻址
• 变址寻址:本指令是要在ROM的一个地址 单元中找出数据。 • 单元地址: (DPTR)+(A) (PC)+(A) • 变址寻址只有读操作而无写操作,在指令 符号上采用 MOVC 的形式,例如:
MOVC A,@A+DPTR;(A)←((A)+(DPTR)) MOVC A,@A+PC ;(A)←((A)+(PC))
返回Hale Waihona Puke Baidu
一、内部数据存储器间数据传送指令
3.以直接地址为目的操作数
MOV direct,A; (direct) ← (A) MOV direct,Rn; (direct) ← (Rn) MOV direct2,direct1;(direct2)←(direct1) MOV direct,@Ri ; (direct) ← ((Ri)) MOV direct,#data; (direct) ← #data
相对寻址
•
目的地址=当前PC值+rel =源地址+转移指令字节数+rel
例如 SJMP 08H PC←PC+2+08H
程序存储器 rel= 08H 2000H 2001H 2002H 200AH SJMP 08H
;相对短转移指令
当前PC PC =2000H + 2 PC 2000H
2001H 2002H
寻址方式
• 寻找操作数所在单元的地址称之为寻址 。 • 寻址方式的多少是计算机功能强弱的重 要标志。
3.2 MCS51的寻址方式
• 3.2.1 立即寻址
• 3.2.2 直接寻址 • 3.2.3 寄存器寻址 • 3.2.4 寄存器间接寻址 • 3.2.5 变址寻址 • 3.2.6 相对寻址 • 3.2.7 位寻址
执行: MOVC A,@ A+DPTR 则:(A)=50H。
例:在外部ROM/EPROM中从2000H单元开始 依次存放0-9的平方值:0,1,4,…,81, 要求依据累加器A的值(0-9)来查找对应的 平方值。分析下述程序的结果。 程序1 92 81 2009H MOV DPTR,#2000H 2002H 22 4 2001H 12 1 MOV A,#09H 0 2000H 02 MOVC A,@A+DPTR 执行结果:(A)=81, (DPTR)=2000H
二、访问外部数据存储器的指令
• •
访问外部存储器必须通过累加器A 采用间接寻址方式
MOVX MOVX MOVX MOVX
A,@DPTR ;(A) ← ((DPTR)) @DPTR,A ;(DPTR) ← (A) A,@Ri ;(A) ← ((Ri)) @Ri,A ;(Ri)← (A)
外部RAM
例: 已知外部RAM (0203H)=0FFH,执行: MOV DPTR,#0203H MOVX A,@DPTR MOV 30H,A MOV A,#00H MOVX @DPTR,A 问:(1)程序功能 (2)(DPTR)=? (A)=? (30H)=? (0203H)=?
五、堆栈操作类指令
PUSH direct;(SP)←(SP)+1, ((SP))←(direct) POP direct;(direct)←((SP)), (SP) ← (SP)-1
指令 PUSH 40H 操作示意图
第 3 章 指令系统
3. 1 MCS-51单片机汇编语言与指令格式
3.2 寻址方式
3.3 MCS-51指令系统
3.4 汇编语言及程序设计 3.5 基本程序设计方法 3.6 程序设计举例
• 指令与指令系统 (附录B p336)
• MCS-51的指令系统分为: (1)数据传送类(29条) (2)算术运算类(24条) (3)逻辑运算类(24条) (4)控制转移类(17条) (5)位操作类(17条) 共111条指令
又如:MOV 32H,C SETB PSW.3
;(32H)←(CY)
返回本节
3.3 分类指令
3.3.1 数据传送类指令
3.3.2 算术运算类指令
3.3.3 逻辑运算与移位类指令
3.3.4 控制转移类指令
3.3.5 位操作指令
返回本章
3.3.1 数据传送类指令
• •
•
•
数据传送类指令共29条, 指令执行后,源操作数不变,目的操作数被源 操作数取代。 数据传送类指令用到的助记符有 MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 数据传送类指令不影响标志位 CY 、 AC 、 OV 但可能影响奇偶标志P
程序2
MOV MOV MOVX MOV MOV MOVX P2,#02H R0,#03H A,@R0 30H,A A,#00H @R0,A
三、访问程序存储器的指令
MOVC A,@A+DPTR;(A)← ((A)+(DPTR)) MOVC A,@A+PC ;(A)← ((A)+(PC))
例如:已知(A)=30H,(DPTR)=3000H, 程序存储器单元(3030H)=50H,
3.2.1 立即寻址
• 指令中直接给出操作数的寻址方式。 例如:MOV P1,# 0FFH MOV DPTR,# 3400H MOV 30H,# 40H;
上述三条指令执行完后,寄存器 P1 中数据为 立即数据 FFH , DPTR 寄存器中数据为 3400H , 30H 单元( 8 位内部数据存储器 RAM 的单元地 址)中数据为立即数40H。
一、内部数据存储器间数据传送指令
1.以A为目的操作数
MOV MOV MOV MOV
A,Rn ;(A)←(Rn) A,direct;(A)←(direct) A,@Ri ;(A)←((Ri)) A,#data;(A)← #data
返回
一、内部数据存储器间数据传送指令
2.以Rn为目的操作数 MOV Rn,A ;(Rn) ← (A) MOV Rn,direct ;(Rn) ←(direct) MOV Rn,#data ;(Rn) ← #data
返回
一、内部数据存储器间数据传送指令
4.以间接地址为目的操作数
MOV @Ri,A ;(Ri) ← (A) MOV @Ri,direct;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data
例如:设(30H)=6FH,R1=40H, 执行:MOV @R1,30H 结果:(40H)=6FH。
外部ROM
… … …
程序2 MOV A,#09H ADD A,#0FH MOVC A,@A+PC 执行结果: (A)=81, (PC)=1FF1H
偏移量=2000H-(1FF0H+1) =0FH
2009H
81
…
4 1 0
92
…
22 12 02
PC 当前PC
2002H 2001H 2000H
…
1FF0H 1FF1H
; (A0~3 ) ; (A0~3)
(Ri0~3) (A4~7)
例:(R0)=20H,(A)=3FH,(20H)=75H (1) 分别执行 XCH A,R0 ;(A)=? (R0)=? XCHD A,@R0;(A)=? SWAP A;(A)=? (2)执行程序段 MOV A,20H XCH A,R0 MOV 20H, A 则(A)=? (R0)= ? (20H)=?
指令格式
LOOP:MOV A,#10H
标号
;(A)
10H
注释
[标号:] 操作码 [目的操作数] [,源操作数] [;注释]
指令中常用符号
(1)Ri和Rn (2)#data (3)#data16 (4)rel (5)addr16 (6)addr11
(7) direct (8)bit (9)@ (10)(X) (11)((X)) (12)
返回本节
3.2.6 相对寻址
•
•
• •
相对寻址用于修改PC值,主要用于实现 程序的分支转移。 以当前程序计数器 PC 的内容 ( 相对转移 指令所在地址+转移指令字节数)为基础, 加上指令给出的偏移量 rel ,而构成实 际操作数地址的寻址方式。 当前PC值=源地址+转移指令字节数。 偏移量rel为单字节有符号数,以补码形 式表示,范围是-128~+127
返回本节
一、内部数据存储器间数据传送指令
MOV A,direct MOV A,#data MOV A,Rn MOV A,@Ri
直接地址 direct
MOV @Ri,direct MOV @Ri,#data MOV @Ri,A
累加器 A
直接地址 direct
间接地址 @Ri
寄存器 Rn
立即数 #data
PSW为直接寻址寄存器的符号地址
MOV A,40H ;(A)←40H
40H为直接给出的内部RAM的地址
3.2.3 寄存器寻址
• 以通用寄存器的内容为操作数的寻址方式。 • 通用寄存器指A、B 、DPTR、C以及R0~ R7 。 例如: MOV A ,R0
R0 30H 30H A 30H
返回本节
3.2.4 寄存器间接寻址
PC (2002H) 200AH
…
3.2.7 位寻址
• •
位寻址其实是一种直接寻址方式,不过其地址 是位地址。 位寻址只能对有位地址的单元作位寻址操作。 例如:SETB 10H ;将位地址为10H的位置1
22H单元的D0位的位地址为10H,若22H单元中存放着 数据40H执行上述指令后(22H)=41H。
返回本节
3.2.2 直接寻址
• 指令中直接给出操作数地址的寻址方式。 例如:MOV A,30H ;(A)←(30H)
30H为直接给出的内部RAM的地址
片内RAM
30H
34H 34H
A
34H
• 能进行直接寻址的存储空间有 SFR 寄存器和 内部数据RAM。
例如: MOV D0H,#20H
MOV PSW,#20H;(PSW)←20H
83H 0FH 24H 09H 74H
外部ROM 偏移量=表首地址-(MOVC指令所在地址+1)
…
四、数据交换类指令
l 字节交换 XCH A,Rn XCH A ,direct XCH A,@Ri l 半字节交换 XCHD A,@Ri SWAP A
;(A) ;(A) ;(A)
(Rn) (direct) ((Ri))
• 看这个问题,要求从30H单元开始,取20个数, 分别送入A累加器 MOV A,30H MOV A,31H … MOV R7,#20 MOV R0,#30H LOOP:MOV A,@R0 ; (A) ((R0)) INC R0 ;寄存器内容加1 DJNZ R7,LOOP ;直接寻址字节内容 减1不为零转移 (p69)
寄存器 DPTR
MOV Rn,A MOV Rn,direct MOV Rn,#data
MOV direct,A MOV direct,@Ri MOV DPTR,#Data MOV direct,#data MOV direct,Rn MOV direct2,direct1
图3-6 MCS-51单片机片内数据传送图
返回本节
• 寄存器间接寻址 :以寄存器中内容为地址, 以该地址中内容为操作数的寻址方式。 • 间接寻址的存储器空间包括内部数据 RAM和外部数据RAM。 • 能用于寄存器间接寻址的寄存器有 R0 , R1,DPTR(数据指针寄存器) ,SP(堆 栈指针)。SP仅用于堆栈操作。
MOV A,@R0
执行示意图
返回
一、内部数据存储器间数据传送指令
5.以DPTR为目的操作数
MOV DPTR,#data16 ;(DPTR) ← #data16
例如:执行 MOV DPTR,#2000H 结果:(DPTR)= 2000H。
返回
例:(30H)=40H,(40H)=10H,(P1)=0CAH 执行: MOV R0,#30H MOV A,@R0 MOV R1,A MOV 30H,@R1 MOV @R1,P1 MOV P2,P1 问: (30H)=? (40H)=? (P1)=? (P2)=? (R1)=? (A)=?
3.1 汇编语言与指令格式
• 机器语言汇编语言
74H 09H MOV A,#09H • 汇编 人工汇编 机器汇编
返回本章
机器语言 汇编语言
指令格式
目的操作数
源操作数
例如:MOV P1,#0FFH
操作码
• 在 MCS-51 指令中,一般指令主要由 操作码、目的操作数、源操作数组成。
( 1 )操作码指明执行什么性质和类型的操作。例 如,数的传送、加法、减法等。 (2)目的操作数指定操作结果存放的地址。 ( 3 )源操作数指明操作的对象或者是操作数所在 的地址。
片内RAM R0 30H 30H A 34H
34H
3.2.5 变址寻址
• 变址寻址:本指令是要在ROM的一个地址 单元中找出数据。 • 单元地址: (DPTR)+(A) (PC)+(A) • 变址寻址只有读操作而无写操作,在指令 符号上采用 MOVC 的形式,例如:
MOVC A,@A+DPTR;(A)←((A)+(DPTR)) MOVC A,@A+PC ;(A)←((A)+(PC))
返回Hale Waihona Puke Baidu
一、内部数据存储器间数据传送指令
3.以直接地址为目的操作数
MOV direct,A; (direct) ← (A) MOV direct,Rn; (direct) ← (Rn) MOV direct2,direct1;(direct2)←(direct1) MOV direct,@Ri ; (direct) ← ((Ri)) MOV direct,#data; (direct) ← #data
相对寻址
•
目的地址=当前PC值+rel =源地址+转移指令字节数+rel
例如 SJMP 08H PC←PC+2+08H
程序存储器 rel= 08H 2000H 2001H 2002H 200AH SJMP 08H
;相对短转移指令
当前PC PC =2000H + 2 PC 2000H
2001H 2002H
寻址方式
• 寻找操作数所在单元的地址称之为寻址 。 • 寻址方式的多少是计算机功能强弱的重 要标志。
3.2 MCS51的寻址方式
• 3.2.1 立即寻址
• 3.2.2 直接寻址 • 3.2.3 寄存器寻址 • 3.2.4 寄存器间接寻址 • 3.2.5 变址寻址 • 3.2.6 相对寻址 • 3.2.7 位寻址
执行: MOVC A,@ A+DPTR 则:(A)=50H。
例:在外部ROM/EPROM中从2000H单元开始 依次存放0-9的平方值:0,1,4,…,81, 要求依据累加器A的值(0-9)来查找对应的 平方值。分析下述程序的结果。 程序1 92 81 2009H MOV DPTR,#2000H 2002H 22 4 2001H 12 1 MOV A,#09H 0 2000H 02 MOVC A,@A+DPTR 执行结果:(A)=81, (DPTR)=2000H
二、访问外部数据存储器的指令
• •
访问外部存储器必须通过累加器A 采用间接寻址方式
MOVX MOVX MOVX MOVX
A,@DPTR ;(A) ← ((DPTR)) @DPTR,A ;(DPTR) ← (A) A,@Ri ;(A) ← ((Ri)) @Ri,A ;(Ri)← (A)
外部RAM
例: 已知外部RAM (0203H)=0FFH,执行: MOV DPTR,#0203H MOVX A,@DPTR MOV 30H,A MOV A,#00H MOVX @DPTR,A 问:(1)程序功能 (2)(DPTR)=? (A)=? (30H)=? (0203H)=?
五、堆栈操作类指令
PUSH direct;(SP)←(SP)+1, ((SP))←(direct) POP direct;(direct)←((SP)), (SP) ← (SP)-1
指令 PUSH 40H 操作示意图
第 3 章 指令系统
3. 1 MCS-51单片机汇编语言与指令格式
3.2 寻址方式
3.3 MCS-51指令系统
3.4 汇编语言及程序设计 3.5 基本程序设计方法 3.6 程序设计举例
• 指令与指令系统 (附录B p336)
• MCS-51的指令系统分为: (1)数据传送类(29条) (2)算术运算类(24条) (3)逻辑运算类(24条) (4)控制转移类(17条) (5)位操作类(17条) 共111条指令
又如:MOV 32H,C SETB PSW.3
;(32H)←(CY)
返回本节
3.3 分类指令
3.3.1 数据传送类指令
3.3.2 算术运算类指令
3.3.3 逻辑运算与移位类指令
3.3.4 控制转移类指令
3.3.5 位操作指令
返回本章
3.3.1 数据传送类指令
• •
•
•
数据传送类指令共29条, 指令执行后,源操作数不变,目的操作数被源 操作数取代。 数据传送类指令用到的助记符有 MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 数据传送类指令不影响标志位 CY 、 AC 、 OV 但可能影响奇偶标志P
程序2
MOV MOV MOVX MOV MOV MOVX P2,#02H R0,#03H A,@R0 30H,A A,#00H @R0,A
三、访问程序存储器的指令
MOVC A,@A+DPTR;(A)← ((A)+(DPTR)) MOVC A,@A+PC ;(A)← ((A)+(PC))
例如:已知(A)=30H,(DPTR)=3000H, 程序存储器单元(3030H)=50H,