51作业(指令系统)
MCS51单片机指令系统

第一条指令为远查表指令,可以在64K的程序存储器空间寻 址。基地址寄存器为DPTR,其意思为,DPTR里面存放的是 程序存储器中数据表格的首地址,A为数据地址的偏移量。
这条指令执行以后,以 (A)+(DPTR)的数值为地址数 据就送进A里面来了,也就是从表格首地址开始以后的第(A) 个数据被送进A了。(举例子说明)
编写好的程序都放在程序存储器中,由于一个存储地址所 指示的存储单元只能存放一字节的数据。所以,在存放指令时, 必须将指令拆分成一个一个字节进行连续存放。
比如: 实现“累加器加10H”这条指令,其机器语言为 0111010000010000, 占用了两个字节,就必须拆成两个字节 进行连续存储。
但是,用二进制来表示比较麻烦,因此,也常用十六进制来 表示如:74H 10H来表示以上这条机器语言。可见,用十六进 制表示指令比较简单,但是,指令系统有上百条指令,不易记 住。所以,一般采用容易记住的一些缩写符号来表示机器语言,
2. 在指令中直接给出操作数的地址, 这种寻址方式就属
于直接寻址方式。在这种方式中, 指令的操作数部分直接 是操作数的地址。
比如:MOV A,30H;将30H里面的数送到A里面 MOV 21H,30H;将30H里面的数存放到21H里面 在MCS -51 单片机指令系统中, 直接寻址方式中可
以访问 3 种存储器空间: (1) 内部数据存储器的低 128 个字节单元(00H~
7. 位寻址 指按照位进行的寻址操作,(前面讲的都是按字节进
行的寻址操作)。该种寻址方式中, 操作数是内部RAM单元 中20H到2FH的128个位地址以及SFR中的11个可进行 位寻址的寄存器中的位地址寻址。
比如:MOV C,20H;就是将RAM中位寻址区中20H位地 址中的内容送给C。区别与MOV A,20H;这个是将内部 RAM中20H单元的内容送给A。
[信息与通信]MCS-51单片机指令系统-数据传送类指令
![[信息与通信]MCS-51单片机指令系统-数据传送类指令](https://img.taocdn.com/s3/m/e38c3c365bcfa1c7aa00b52acfc789eb162d9e5d.png)
<P1>=0CAH,分析以下程序执行后各单元及寄存
器、P2口的内容.
• MOV R0,#30H
;R0=30H
• MOV A,R0
;A=40H
• MOV R1,A
;R1=40H
• MOV B,R1
;B=10H
• MOV R1,P1
;<40H>
• MOV P2,P1
=0CAH
• MOV
;
•执行上述指10令H后,#的20结H果为:<R0>=3<0PH2,<>R=10>C=A<HA>=40H,
3.3 MCS-51指令系统
3.3.1 数据传送类指令〔29条〕 传送类指令分成两大类
1. MOV,一般传送 2.Байду номын сангаас非MOV,特殊传送, 如:MOVC、MOVX、PUSH、
POP、 对PSW的X影C响H、XCHD及SWAP.
• 1. 访问片内数据存储器的一般数据传送指令
• 该类指令的功能是实现数在片内RAM单元之间、 寄存器之间、寄存器与RAM单元之间的传送.所 有指令具有统一的格式,其格式如下:
MOV Rn,
A direct
#data
例:若〔60H〕= 30H 执行 MOV R6,60H
结果:〔R6〕= 30H.
3> 以direct 为目的操作数的指令
MOV direct,
A Rn direct1 Ri
#data
例:若〔R0〕=30H,〔30H〕=25H 执行MOV 40H,R0 指令
结果:〔40H〕=25H.
RAM20H单元 • 外部ROM 2000H单元中的内容送到外部
第3章 51单片机指令系统

3.1.3 堆栈操作指令
(1)入栈指令:
PUSH direct; SP ← SP+1, (SP) ← (direct)
入栈操作:栈指针SP+1指向栈顶的上 一个空单元,将直接地址direct寻址的单元 内容压入当前SP所指示的堆栈单元中。 (本操作不影响标志位)
例3-3 在中断响应时,SP=09H,数据 指针DPTR的内容为0123H。执行下列指令 后:
MOV @Ri , A ; (Ri)←A MOV @Ri , direct ; (Ri)←(direct) MOV @Ri , data ; (Ri)←#data 上述指令将累加器A,直接地址单元内 容或立即数送到Ri间接寻址单元中。由于内 容较多,下面需要说明:
累加器A是个使用最多的寄存器,MCS-51单 片机以A为中心体系结构。绝大部分指令均需通 过A送到ALU进行运算,结果存于A中,有些指令 仅在A中进行。 直接地址direct ,8位直接地址可寻址0~255个 单元。对于8051则直接寻址内部RAM0~127地址 空间的单元及128~255地址空间的特殊功能寄存 器。这里需注意128~255地址空间很多单元开始 时无定义,对无定义单元进行读/写,则读数不定, 欲写入的数将丢失。 间接寻址@Ri,@间接寻址的符号,是以Ri 的内容作为地址进行寻址,亦即Ri的内容不是操 作数,而是地址。此地址所对应的单元内容才是 所要找的操作数。间接寻址的寻址范围与直接寻 址相同(0~255)。直接寻址单元在编程时就已 明确,而间接寻址单元是在程序运行中明确。
MCS-51指令系统解析

在寄存器中,指令中只给出该寄存器。执行指令时,首先
根据寄存器的内容,找到所需要的操作数地址,再由该地 址找到操作数并完成相应操作。
在MCS-51指令系统中,用于寄存器间接寻址的寄存器
有R0、R1和DPTR,称为寄存器间接寻址寄存器。
注意:间接寻址寄存器前面必须加上符号“@”。例如,
指令MOV A,@R0执行的操作是将R0的内容作为内部RAM 的地址,再将该地址单元中的内容取出来送到累加器A中。
A 3 AH
3 AH
图2.3 立即数寻址示意图
MOV P1,#55H MOV 20H,#55 MOV A,#0F0H MOV R4,#0FH MOV R0,#20H
;将立即数55H送P1口 ;将立即数55H送20H 单元 ;将立即数0F0H送累加器A ;将立即数0FH送寄存器R4中 ;将立即数20H送寄存器R0口
内部RAM
R1 A 2 0H
2 0H
0 9H 0 1
RS1 RS0
图2.1 寄存器寻址示意图
内部 RAM
A 8 8H
8 8H
3 AH图2.2 直接来自址示意图2. 直接寻址 直接寻址是指把存放操作数的内存单元的地址直接写在
指令中。在 MCS-51 单片机中,可以直接寻址的存储器主要
有内部RAM区和特殊功能寄存器SFR区。 例如,指令MOV A,3AH执行的操作是将内部RAM 中 地址为 3AH 的单元内容传送到累加器 A 中,其操作数 3AH 就 是存放数据的单元地址,因此该指令是直接寻址。 设内部RAM 3AH单元的内容是88H,那么指令MOV A, 3AH的执行过程如图2.2所示。
A,#00H,NEXT指令,操作数之间也以逗号相隔。
注释是对指令的解释说明,用以提高程序的可读性; 注释前必须加分号。
第3章 MCS-51指令系统

注意
•区分各种寻址方式的涵义,正确取得传送的 数据
例:R0=30H,(30H)=50H
MOV A,R0;(A)=30H MOV A,@R0;(A)=50H MOV A,30H;(A)=(30H)=50H MOV A,#30H;(A)=30H
•所有传送指令都不影响标志位
•数据传送与数据交换区别开
2.以寄存器Rn为目的操作数的指令(3条)
3.2.6 相对寻址
相对寻址方式是为了程序的相对转移而设计 的, 以PC的内容为基址,加上给出的偏移量作为 转移地址,从而实现程序的转移。 转移的目的地址=转移指令地址+转移指令字 节数+偏移量
值得注意的是,偏移量是有正负号之分的有符号数, 偏移量的取值范围是当前PC值的-128—+127之间。
l数据传送类指令(29条) l算术运算类指令(24条) l逻辑操作类指令(24条)
控制转移类指令(17条) l位操作类指令 (17条)
l
3.3.1数据传送指令(29条)
片内传送指令 MOV 片外传送指令 MOVX 查表传送指令 MOVC 累加器交换指令 XCH、XCHD、SWAP 堆栈操作指令 PUSH、POP MOV 目的操作数
这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存 器Rn中。有直接、立即和寄存器寻址方式:
MOV Rn , direct ;(direct)→(Rn) 直接寻址单元中的内容送到寄存器Rn中 MOV Rn , #data ;#data→(Rn) 立即数直接送到寄存器Rn中 MOV Rn , A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中
3.2.7 位寻址
在MCS-51单片机中,RAM中的20H—2FH字节单元对应
第3章 MCS-51单片机指令系统

(1)内部数据存储器的低128个字节单元 (00H~7FH)。例: MOV A, 40H ,表示把内 部RAM 40H单元的内容传送给A。 假设40H单元中的内容为2BH,结果是将直接地 址40H单元中的数据2BH传送到累加器A中。
第三章 MCS-51单片机指令系统
3.2.2 直接寻址
(2)特殊功能寄存器。 特殊功能寄存器只能用直接寻址方式进行访问。 对于特殊功能寄存器,在助记符指令中可以直接 用符号来代替地址。例: MOV A, P0 ,表示把 P0口(地址为80H)的内容传送给A。
3.3.1 内部数据存储器传送指令
1.立即数传送指令
MOV A,#data ;A←data MOV Rn,#data ;Rn←data,n=0~7 MOV direct,#data ;direct←data MOV @Ri,#data ;(Ri)←data,i=0,1 MOV DPTR,#data16 ;DPTR←data16 前四条指令将8位立即数传送到指定的存储单元中。 最后一条指令将16位立即数传送到数据指针 DPTR中,其中高8位送入DPH,低8位送入DPL。
(3)三字节指令 编码格式为:
例如数据传送指令MOV 20H,#3AH的编码格式为:
3.2 寻址方式
第三章 MCS-51单片机指令系统
所谓寻址,就是寻找操作数的真正地址,寻址方 式,就是指寻找操作数地址的方式。
在用汇编语言编程时,数据的存放、传送、运算 都要通过指令来完成。 编程者必须自始至终都要 十分清楚操作数的位置, 以及如何将它们传送到适 当的寄存器去参与运算。每一种计算机都具有多 种寻址方式。寻址方式的多少是反映指令系统优 劣的主要指标之一。
2. 汇编语言
汇编语言就是用助记符表示的指令,汇编语言与 机器语言一一对应。用汇编语言编写程序,每条 指令的意义一目了然,给程序的编写、阅读和修 改带来很大方便。而且用汇编语言编写的程序占 用内存少,执行速度快,尤其适用于实时应用场 合的程序设计。因此,在单片机应用系统中主要 是用汇编语言来编写程序。 汇编语言的缺点:缺乏通用性,程序不易移植, 是一种面向机器的低级语言。使用汇编语言编写 程序时,必须熟悉机器的指令系统、寻址方式、 寄存器的设置和使用方法。每种计算机系统都有 它自己的汇编语言。不同计算机的汇编语言之间 不能通用。
51系列单片机指令系统

MOV DPTR,#1000H MOVX A,@DPTR INC DPTR, MOVX @DPTR,A 7、程序存储器向累加器A传送指令 MOVC A,@A+DPTR MOV DPTR,#100H MOV A,R0 MOVC A,@A+DPTR ORG 0100H. DB 0,1,4,9,16,25 8、堆栈操作指令 PUSH direct POP direct 第一条指令称之为入栈指令,就是将direct中的内容 送入堆栈中,第二条指令称之为弹出指令,就是将堆栈 中的内容送回到direct中。
位寻址时,操作数是二进制数的某一位,其位地 址出现在指令中,例如指令 • SETB bit ;(bit) ← l • 51系列单片机可用于位寻址的空间是内部RAM的可 位寻址区和SFR区中的字节地址可以被8整除(即地址以 “0”或“8”结尾)的寄存器所占空间,寻址方式如表 2-2所示。
表2-2 寻址方式一览表
寻 址 方 式
寻 址 范 围
R0-R7 ,DPTR ACC,B,C(CY位)
内部RAM 00H-7FH 特殊功能寄存器 80H-FFH 内部RAM位寻址区 (20H-2FH): 位地址00H-7FH 可寻址的特殊功能寄存器: 位地址 80H-F7H 以数据指针表示操作数 内部RAM 00H-7FH 外部RAM或I/O端口 00H-FFH / 0000H-FFFFH
图2-3 寄存器间接寻址
图2-4 立即寻址
4、立即寻址
•
立即寻址时,指令中直接给出操作数。例如指令 MOV A,#76H ;数据76H送累加器 A。 • 立即数寻址过程如图2-4所示。
5、变址寻址
•
变址寻址时,指定的变址寄存器的内容与指令中 给出的偏移量相加,所得的结果作为操作数的地址。 例如指令MOVC A, @A+DPTR ;((A)+(DPTR))送 A。变址寻址过程如图2-5所示。 不论用DPTR或PC作为基址指针,变址寻址方式都 只适用于51系列单片机的程序存储器,通常用于读取 数据表也就是将程序存储器中的数送入A中。因此也称 为查表指令,常用此指令来查一个已做好在程序存储 器中的表格,这条指令采用变址寻址。
第3章 MCS-51指令系统

16
MCS-51单片机指令系统
MCS-51单片机指令系统包括111条指令 按功能可以划分为以下5类:
1. 数据传送和交换指令(29条)
2. 算术运算指令(24条) 3. 逻辑运算指令(24条) 4. 控制转移指令(17条) 5. 位操作指令(17条)
17
数据传送和交换类指令主要有以下几种:
1. 2. 3.
30H
Eg:MOV 30H,#33H 33H
30H
XX 30H
33H
30H
31H
Eg:MOV 30H,31H
55H
XX
55H
25
A
30H XX
地址
30H 33H
Eg:MOV 30H, A
33H
R0
Eg:MOV 30H,@R0
55H
取出
30H 78H 30H
55H
R3
78H
30H XX
55H
MOV A , 30H
XX 55H
30H
A
6
3、寄存器寻址
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄 存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。 数据存放在R0~R7中的某个通用寄存器内,或者放在某个专用 寄存器中。 e.g.: MOV A,R7 ADD A,R0
DPTR
2000H
DPTR 2000H
XXXX
Eg:将数据指针DPTR指向存于ROM中的表格首地址。
MOV DPTR,#TABLE
27
三、片外数据传递指令
使用DPTR和Ri进行间接寻址 MOVX A, @DPTR ;A ←((DPTR))片外 MOVX A,@Ri ;A ←((Ri))片外 MOVX @DPTR,A ;(DPTR)片外←(A) MOVX @Ri,A ;(Ri)片外←(A) 注意: 该指令用于在单片机和外部RAM、扩展I/O的数据传送; 使用Ri时,只能访问低8位地址为00H~FFH地址段; 使用DPTR时,能访问0000H ~ FFFFH地址段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令系统作业
一、基础知识
1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A、R0和内部RAM中50H、51H、52H单元的内容为何值?
MOV A,59H
MOV R0,A
MOV A,#00H
MOV @R0,A
MOV A,#25H
MOV 51H,A
MOV 52H,#70H
2.执行下列程序后,A和B寄存器的内容是多少?
MOV SP,#3AH
MOV A,#20H
MOV B,#30H
PUSH ACC
PUSH B
POP ACC
POP B
3.假定外部RAM2000H单元的内容为80H,那么执行下列程序后,A的内容是多少?
MOV P2,#20H
MOV R0,#00H
MOVX A,@R0
4.假定累加器A的内容为30H。
1000H:MOVC A,@A十PC
执行指令后,把程序存储器的哪个单元的内容送累加器A中?
5.假定DPTR的内容为8100H,累加器的内容为40H,执行下列指令后,送入的是程序存储器的哪个元的内容?
MOVC A,@A十DPTR
6.假定(SP)=60H,(ACC)=30H,(B)=70H,(60H)=0FDH,执行下列程序后,SP、60H、61H、62H的内容各是多少?
PUSH ACC
PUSH B
7.假定(SP)=62H,(60H)=0FDH,(61H) =50H,(62H)=7AH,执行下列程序后
SP、60H、61H、62H及DPTR的内容各是多少?
8.假定(A)=85H,(R0)=20H,(20H) =0AFH,下列执行指令后累加器A的内容及Cy、AC、OV、P的内容是多少?
9.假定(A)=85H,(20H)= 0FEH,(Cy)= 1,执行下列指令后累加器A的内容及Cy、AC、OV、P的内容是多少?
ADD A,20H
10.假定(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)= 40H,(40H)=00H,执行下列指令后,上述寄存器和存储单元的内容是多少?
INC A
INC R3
INC 30H
INC @ R0
11.假定(A)=56H,(R5)=67H,执行下列指令后A和Cy的内容是多少?
A DD A, R5
DA A
12.假定(A)=0FH,(R7)=19H,(30H)=00H,(R1)= 40H,(40H)=0FFH,执行下列指令后,上述寄存器和存储单元的内容是多少?
DEC A
DEC R7
DEC 30H
DEC @R1
13.分析下列指令序列,写出它所实现的逻辑表达式。
MOV C,P1.0
ANL C,P1.1
ANL C,/P1.2
MOV P3.0,C
14.假定(A)=50H,(B)=0A0H。
执行下列指令后,寄存器B的内容和累加器A的内容为多少,Cy和OV的状态是什么?
MUL AB
15.假定(A)=0FBH,(B)=12H。
执行下列指令后,寄存器B的内容和累加器A的内容为多少,Cy和OV的状态是什么?
DIV AB
16.假定(A)=0CFH,执行下列指令后,累加器A的内容为多少?
SW AP A
17.已知(A)=83H,(R0)=17H,(17H)=34H。
请写出执行完下列程序段后A的内容。
ANL A,17H
ORL 17H,A
CPL A
18.什么是寻址方式?在MCS-51中,有哪几种寻址方式?
19.设(A)=55H,(R5)=0AAH,如果执行“ANL A,R5”指令后,那么累加器A和寄存器R5的内容是多少? 如果执行"ORL A,R5”指令,那么累加器A和寄存器R5的内容是多少? 如果执行“XRL A,R5”指令,那么A和R5的内容又是多少?
20.DA指令作用是什么? 它跟在哪些指令的后面使用?
21.“LJMP PROG”和“LCALL PROG”的区别是什么?
二、选择题
1.MOV A,@R0这条指令中@R0的寻址方式称为( )。
(A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即数寻址
2.在CPU内部,反映程序运行状态或反映运算结果的特殊功能寄存器是( )。
(A)PC (B)PSW (C)A(D)SP
3.在单片机CPU中,PSW中的Cy、AC、OV和P是反映( )参与运算的状态。
(A)DPTR (B)R5 (C)A(D)SP
4.下列指令中正确的是( )。
(A)MOV P2.1,A(B)JBC TF0,L1
(C)MOVX B,@DPTR (D)MOV A,@R3
5.下列指令中错误的是( )。
(A)SETB 50H.0 (B)MOV A,B
(C)JNC LOOP (D)SUBB A,R0
6.下列哪条减法指令是错误的?( )
(A)SUBB A,R7 (B)SUBB A,@R1
(C)SUBBC A,#30H (D)SUBB A,30H
7.指令“CJNE A,#08H,LOOP”影响PSW的( )位。
(A)AC (B)OV (C)Cy (D)RSl
8.在“MUL AB”指令中,若积超过255,则( )。
(A)Cy=1 (B)AC=1 (C)OV=1 (D)P=1
9.LJMP跳转范围是( )。
(A)64KB (B)8KB (C)2KB (D)-128~127B
10.MCS—51系列单片机最长的一条指令需( )个机器周期。
(A)1 (B)4 (C)2 (D)8
11.下列指令中正确的是( )。
(A) CJNE A,R0,NEXT (B)CJNE A,@R0,NEXT
(C) CJNE A,#40,NEXT (D)CJNE R2,30H,NEXT
12.下列指令中错误的是( )。
(A) CLR A(B)CLR 27H.5
(B) CLR R7 (D)CLR C
13.下列指令中正确的是( )。
(A) MOV R1,R3 (B)DEL DPTR
(C) MUL A,30H (D)MOV TLD,R7
14.MCS—5l单片机扩展I/O口与外部数据存储器( )。
(A)分别独立编址(B)统一编址
(C)变址编址(D)动态变址
三、简单程序设计
1.试编写程序,将内部RAM的20H、21H、22H这3个连续单元的内容依次存入2FH、2EH和2DH中。
2.编程实现外部RAM 2040H单元的内容与3040H单元的内容互换。
4.已知X被存放在20H(高8位)和21H(低8位)单元,y被存放在22H,编制程序实现X+Y。
5.已知两个十进制数X和Y,X被存放在20H(高位)和21H单元,Y被存放在22H,编制程序实现X+Y。
6.已知X被存放在20H(高8位)21H、22H、23H单元,y被存放在30H(高8位)、3lH、32H、33H单元,编制程序实现X+Y。
7.已知X被存放在20H(高8位)、21H和22H单元,y被存放在23H,编制程序实现X-Y。
8.编写程序实现两个16位数的减法:6F5DH一13B4H,结果存人内部RAM的30H、31H单元,30H存差的低8位。
9.已知X被存放在20H(高8位)21H、22H、23H单元,y被存放在30H(高8位)、31H、32H、33H单元,编制程序实现X—y。
10.已知X被存放在20H(高8位)21H、22H单元,y被存放在30H单元,编制程序实现下X×Y。
11.已知一个数X被存放在20H(高8位)21H单元,用移位方法实现2X。
12.已知一个数X被存放在20H(高8位)21H单元,用移位方法实现X/2。
13.已知一个非正数X被存放在20H(高8位)21H单元,求该数的补码。
14.根据X的值分别将程序转移到指定处执行:X=0,则转PROG l;X=1,则转PROG 2;X=2,则转PROG 3;X=3,则转PROG 4。
15.显示装置如图所示,设计驱动电路并编制程序
实现下列要求:指示灯依次顺时针点亮—逆时针灭—全亮
若干秒全灭,周而复始地重复上述过程。
16.求出无符号单字节数X、y、Z中的最大数存放
在50H单元。
17.把20H~2FH连续16个单元清0。
18.把内部RAM的20H~2FH连续16个单元的内
容转移到外部RAM的2000H单元开始的区域中。
19.一批8位二进制数据存放在单片机内部RAM以
20H单元开始的区域,数据长度为100个,编制程序统计
该批数据中数值为65H的数据的个数,将统计结果存放在
R7中。
20.已知两个十进制数X和Y,X被存放在20H(高
位)和21H单元,y被存放在22H和23H单元,编制程序
实现X—Y。
21.已知4位十进制数X被存放在20H(高位)和21H单元,请将该数转换为分离式BCD 码形式,并将结果存在20H、21H、22H、23H单元。
22.编写程序,将R1中的低4位数与R2中的高4位数合并成一个8位数,并将其存放在R1中。