第 3 章 MCS - 51单片机指令系统
第 3章 MCS - 51单片机指令系统
3.1 寻址方式
3.2 指令系统
第 3 章 MCS - 51单片机指令系统
1.
单字节指令格式由 8位二进制编码表示,例如,
CLR A→E4H
2,双字节指令
双字节指令格式由两个字节组成,操作码和操作数,例如,
MOV A,# 10H→74H 10H
3,三字节指令
三字节指令格式中,第一个字节为操作码,后两个字节为
操作数,例如,
MOV 40H,# 30H→75H 40H 30H
第 3 章 MCS - 51单片机指令系统
一条汇编语言指令中最多包含 4 个区段,如下所示,
[ 标号,] 操作码 [ 操作数 ] [ ;注释 ]
4 个区段之间要用分隔符分开, 标号与操作码之间用
,:,隔开,操作码与操作数之间用空格隔开,操作数与注释
之间用, ;”隔开,如果操作数有两个以上,则在操作数之间要
用逗号,,”隔开 (乘法指令和除法指令除外 )。
第 3 章 MCS - 51单片机指令系统
3.1 寻址方式
所谓寻址方式,就是寻找操作数地址的方式,在用汇编语
言编程时,数据的存放, 传送, 运算都要通过指令来完成 。
编程者必须自始至终都要十分清楚操作数的位置,以及如何
将它们传送到适当的寄存器去参与运算 。 每一种计算机都具
有多种寻址方式 。 寻址方式的多少是反映指令系统优劣的主
要指标之一 。
第 3 章 MCS - 51单片机指令系统
在 MCS -51单片机指令系统中,有以下 7种寻址方式,
( 1) 立即寻址 ;
( 2) 直接寻址 ;
( 3) 寄存器寻址 ;
( 4) 寄存器间接寻址 ;
( 5) 基址寄存器加变址寄存器间接寻址 ;
( 6) 相对寻址 ;
( 7) 位寻址。
第 3 章 MCS - 51单片机指令系统
1.
立即寻址方式是指操作数包含在指令字节中 。 跟在指令
操作码后面的数就是参加运算的数,该操作数称为立即数 。
立即数有一字节和二字节两种可能,例如指令,
MOV A,# 3AH
MOV DPTR,# 0DFFFH
上述两条指令均为立即寻址方式,第一条指令的功能是将
立即数 3AH送累加器 A中,第二条指令的功能是将立即数
0DFFFH送数据指针 DPTR中 ( 0DFH→DPH,0FFH→DPL ) 。
第 3 章 MCS - 51单片机指令系统
2.
在指令中直接给出操作数的地址,这种寻址方式就属于直
接寻址方式 。 在这种方式中,指令的操作数部分直接是操作数
的地址 。
在 MCS -51 单片机指令系统中,直接寻址方式中可以访问 3
种存储器空间,
(1) 内部数据存储器的低 128 个字节单元 ( 00H~ 7FH) 。
(2) 特殊功能寄存器 。 特殊功能寄存器只能用直接寻址方
式进行访问 。
(3) 位地址空间。
第 3 章 MCS - 51单片机指令系统
3,寄存器寻址
在该寻址方式中,参加操作的数存放在寄存器里 。 寄存
器包括 8个工作寄存器 R0~ R7,累加器 A,寄存器 B,数据指
针 DPTR和布尔处理器的位累加器 C。
第 3 章 MCS - 51单片机指令系统
4,寄存器间接寻址
在这种寻址方式中,寄存器的内容为操作数的地址 。 寄存
器间接寻址只能使用寄存器 R0,R1 作为地址指针,寻址内部
RAM区的数据 ; 当访问外部 RAM时,可使用 R0,R1及 DPTR作
为地址指针 。 寄存器间接寻址符号为, @”,例如,
第 3 章 MCS - 51单片机指令系统
5.
这种寻址方式用于访问程序存储器中的数据表格,它以
基址寄存器 DPTR或 PC的内容为基本地址,加上变址寄存器
A的内容作为操作数的地址,例如,
MOVC A,@DPTR+A
JMP @A+DPTR
MOVC A,@ PC+A
第 3 章 MCS - 51单片机指令系统
6,相对寻址
在 MCS -51 指令系统中设有转移指令,分为直接转移
和相对转移指令,在相对转移指令中采用相对寻址方式 。
这种寻址方式是以 PC的内容为基本地址,加上指令中给定
的偏移量作为转移地址 。 指令中给出的偏移量是一个 8 位
带符号的常数,可正可负,其范围为- 128~ +127。
7,位寻址
该种寻址方式中,操作数是内部 RAM单元中某一位的
信息 。
第 3 章 MCS - 51单片机指令系统
3.2 指令系统
3.2.1 指令分类
按指令的功能,MCS -51 指令系统可分为下列 5 类,
(1) 数据传送 ;
(2) 算术运算 ;
(3) 逻辑运算 ;
(4) 位操作 ;
(5) 控制转移。
第 3 章 MCS - 51单片机指令系统
Rn——当前选定的寄存器区中的 8 个工作寄存器 R0~ R7,即
n=0~ 7。
Ri——当前选定的寄存器区中的 2 个寄存器 R0,R1,i=0,1。
direct—— 8 位内部 RAM单元的地址,它可以是一个内部数据
区 RAM单元 (00H~ 7FH)或特殊功能寄存器地址 (I / O端口, 控
制寄存器, 状态寄存器 80H~ 0FFH)。
# data——指令中的 8 位常数 。
# data16——指令中的 16 位常数 。
addr16——16 位的目的地址,用于 LJMP#,LCALL指令,可指
向 64 KB程序存储器地址空间 。
第 3 章 MCS - 51单片机指令系统
addr11——11位的目的地址,用于 AJMP,ACALL指令 。 目
的地址必须与下一条指令的第一个字节在同一个 2 KB程序
存储器地址空间之内 。
rel—— 8 位带符号的偏移量字节,用于 SJMP和所有条件
转移指令中 。 偏移量相对于下一条指令的第一个字节计算,
在- 128~ +127 范围内取值 。
bit——内部数据 RAM或特殊功能寄存器中的可直接寻址
位 。
DPTR——数据指针,可用作 16 位的地址寄存器。
第 3 章 MCS - 51单片机指令系统
A——累加器 。
B——寄存器,用于 MUL和 DIV指令中 。
C——进位标志或进位位 。
@——间接寻址寄存器或基址寄存器的前缀,如 @Ri,@DPTR。
/——位操作数的前缀,表示对该位取反 。
( X) —— X中的内容 。
(( X)) ——由 X寻址的单元中的内容 。
← ——箭头左边的内容被箭头右边的内容所代替。
第 3 章 MCS - 51单片机指令系统
3.2.2 数据传送类指令
图 3 –1 MCS -51传送指令示意图
第 3 章 MCS - 51单片机指令系统
表 3.1 数据传送类指令一览表
第 3 章 MCS - 51单片机指令系统
表 3.1 数据传送类指令一览表
第 3 章 MCS - 51单片机指令系统
1,数据传送到累加器 A
MOV A,R0
MOV A,direct
MOV A,@Ri
MOV A,# data
这组指令的功能是:把源操作数的内容送入累加器 A。
例如, MOV A,# 10H,该指令执行时将立即数 10H送入累
加器 A中 。
第 3 章 MCS - 51单片机指令系统
2,数据传送到工作寄存器 Rn
MOV Rn,A
MOV Rn,direct
MOV Rn,# data
这组指令的功能是, 把源操作数的内容送入当前工作寄
存器区的 R0~ R7中的某一个寄存器 。 指令中 Rn在内部数据
存储器中的地址由当前的工作寄存器区选择位 RS1,RS0 确
定,可以是 00H~ 07H,08H~ 0FH,10H~ 17H,18H~ 1FH。
例如, MOV R0,A,若当前 RS1,RS0 设置为 00 (即工作寄存
器 0 区 ),执行该指令时, 将累加器 A中的数据传送至工作寄
存器 R0(内部 RAM 00H)单元中 。
第 3 章 MCS - 51单片机指令系统
3,数据传送到内部 RAM单元或特殊功能寄存器 SFR的指令
MOV direct,A
MOV direct,Rn
MOV direct,direct
MOV direct,@Ri
MOV direct,# data
MOV @Ri,A
MOV @Ri,direct
MOV @Ri,# data
MOV DPTR,# data16
第 3 章 MCS - 51单片机指令系统
这组指令的功能是:把源操作数的内容送入内部 RAM
单元或特殊功能寄存器 。 其中第三条指令和最后一条指令
都是三字节指令 。 第三条指令的功能很强,能实现内部
RAM之间, 特殊功能寄存器之间或特殊功能寄存器与内部
RAM之间的直接数据传送 。 最后一条指令是将 16位的立即
数送入数据指针寄存器 DPTR。
第 3 章 MCS - 51单片机指令系统
4,累加器 A
MOVX A,@DPTR
MOVX A,@Ri
MOVX @DPTR,A
MOVX @Ri,A
第 3 章 MCS - 51单片机指令系统
这组指令是:在累加器 A与外部数据存储器 RAM单元或
I/O口之间进行数据传送,前两条指令执行时,P3.7 引脚上输出
RD有效信号,用作外部数据存储器的读选通信号 ; 后两条指令
执行时,P3.6 引脚上输出 WR有效信号,用作外部数据存储器
的写选通信号 。 DPTR所包含的 16 位地址信息由 P0 (低 8 位 )
和 P2(高 8 位 )输出,而数据信息由 P0 口传送,P0 口作分时复用
的总线 。 由 Ri作为间接寻址寄存器时,P0 口上分时输出 Ri指
定的 8 位地址信息及传输 8 位数据 。
第 3 章 MCS - 51单片机指令系统
5.
PUSH direct
POP direct
在 MCS -51 单片机的内部 RAM中,可以设定一个先进后
出的区域,称其为堆栈 。 在特殊功能寄存器中有一个堆栈指针
SP,它指出栈顶的位置 。 进栈指令的功能是, 首先将堆栈指针
SP的内容加 1,然后将直接地址所指出的内容送入 SP指出的内
部 RAM单元 ; 出栈指令的功能是, 将 SP所指出的内部 RAM单
元的内容送入由直接地址所指出的字节单元,接着将堆栈指针
SP的内容减 1。
第 3 章 MCS - 51单片机指令系统
例如, 进入中断服务子程序时,把程序状态寄存器 PSW、
累加器 A,数据指针 DPTR进栈保护 。 设当前 SP为 60H。 则
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
执行后,SP内容修改为 64H,而 61H,62H,63H,64H单元中
依次栈入 PSW,A,DPL,DPH的内容 。 当中断服务程序结
束之前,如下程序段 (SP保持 64H不变 )
第 3 章 MCS - 51单片机指令系统
POP DPH
POP DPL
POP ACC
POP PSW
执行之后,SP内容修改为 60H,而 64H,63H,62H,61H
单元中的内容依次弹出到 DPH,DPL,A,PSW中 。
MCS -51 提供一个向上升的堆栈,因此 SP设置初值时要
充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的
使用 。
第 3 章 MCS - 51单片机指令系统
6.
MOVC A,@A+PC
MOVC A,@A+DPTR
这是两条很有用的查表指令,可用来查找存放在外部程序
存储器中的常数表格 。 第一条指令是以 PC作为基址寄存器,A
的内容作为无符号数和 PC的内容 ( 下一条指令的起始地址 )
相加后得到一个 16 位的地址,并将该地址指出的程序存储器单
元的内容送到累加器 A。 这条指令的优点是不改变特殊功能寄
存器和 PC的状态,只要根据 A的内容就可以取出表格中的常数 。
缺点是表格只能放在该条查表指令后面的 256 个单元之中,表
格的大小受到限制,而且表格只能被一段程序所利用 。
第 3 章 MCS - 51单片机指令系统
第二条指令是以 DPTR作为基址寄存器,累加器 A的内容
作为无符号数与 DPTR内容相加,得到一个 16 位的地址,并
把该地址指出的程序存储器单元的内容送到累加器 A。 这条
指令的执行结果只与指针 DPTR及累加器 A的内容有关,与该
指令存放的地址无关,因此,表格的大小和位置可以在 64 KB
程序存储器中任意安排,并且一个表格可以为各个程序块所
共用 。
第 3 章 MCS - 51单片机指令系统
7,字节交换指令
XCH A,Rn
XCH A,@Ri
XCH A,direct
XCHD A,@Ri
SWAP A
前三条指令是将累加器 A的内容和源操作数内容相互交
换 ; 后两条指令是半字节交换指令,最后一条指令是将累加器
A的高 4 位与低 4 位之间进行交换,而另外一条指令是将累加
器 A的低 4 位内容和 ( Ri) 所指出的内部 RAM单元的低 4 位
内容相互交换 。
第 3 章 MCS - 51单片机指令系统
3.2.3 算术运算类指令
表 3.2 算术运算指令
第 3 章 MCS - 51单片机指令系统
表 3.2 算术运算指令
第 3 章 MCS - 51单片机指令系统
表 3.3 影响标志位的指令
第 3 章 MCS - 51单片机指令系统
表
3.
3
影
响
标
志
位
的
指
令
第 3 章 MCS - 51单片机指令系统
一,加法指令
1,普通加法指令
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,# data
第 3 章 MCS - 51单片机指令系统
例如, 120 和 100 之和为 220,显然大于 127,相加时
0 1 1 1 1 0 0 0 120
0 1 1 0 0 1 0 0 100
1 1 0 1 1 1 0 0 220
+
符号位 (最高位 )由 0 变 1,两个正数相加结果变负,实际上它
是和数的最高位,符号位移入了进位标志,此时位 6 有进位而
位 7 无进位,置位溢出标志 OV,结果溢出 。
第 3 章 MCS - 51单片机指令系统
同样,- 120和- 100 相加,结果应为- 220,显然小于-
128,相加时
1 0 0 0 1 0 0 0 -120
1 0 0 1 1 1 0 0 -100+
1 0 0 1 0 0 1 0 0 -220
符号位由 1变为 0,两个负数相加结果变为正数,这是
因为符号位移入进位标志,位 6 无进位而位 7 有进位,置
位溢出标志 OV,由此可判断结果溢出 。
第 3 章 MCS - 51单片机指令系统
2,带进位加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,# data
这组指令的功能与普通加法指令类似,唯一的不同之处
是,在执行加法时,还要将上一次进位标志 Cy的内容也一起
加进去,对于标志位的影响也与普通加法指令相同 。
第 3 章 MCS - 51单片机指令系统
3.
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
这组指令的功能是:将指令中所指出操作数的内容加 1。 若
原来的内容为 0FFH,则加 1 后将产生溢出,使操作数的内容变成
00H,但不影响任何标志 。 最后一条指令是对 16 位的数据指针寄
存器 DPTR执行加 1 操作,指令执行时,先对低 8 位指针 DPL的内
容加 1,当产生溢出时就对高 8 位指针 DPH加 1,但不影响任何
标志 。
第 3 章 MCS - 51单片机指令系统
4.
DA A
这条指令对累加器 A参与的 BCD码加法运算所获得的 8 位
结果进行十进制调整,使累加器 A中的内容调整为二位压缩型
BCD码的数 。 使用时必须注意,它只能跟在加法指令之后,不
能对减法指令的结果进行调整,且其结果不影响溢出标志位 。
执行该指令时,判断 A中的低 4 位是否大于 9 和辅助进
位标志 AC是否为, 1”,若两者有一个条件满足,则低 4 位加
6 操作 ; 同样,A中的高 4 位大于 9 或进位标志 Cy为, 1”两者
有一个条件满足时,高 4 位加 6 操作 。 例如, 有两个 BCD数 36
与 45 相加,结果应为 BCD码 81,程序如下,
第 3 章 MCS - 51单片机指令系统
MOV A,# 36H
ADD A,# 45H
DA A
这段程序中,第一条指令将立即数 36H(BCD码 36)送入累
加器 A; 第二条指令进行如下加法,
0 0 1 1 0 1 1 0 36
0 1 0 0 0 1 0 1 45
0 1 1 1 1 0 1 1 7B
0 0 0 0 0 1 1 0 06+
+
1 0 0 0 0 0 0 1 81
得结果 7BH; 第三条指令对累加器 A进行十进制调整,低 4 位
(为 0BH)大于 9,因此要加 6,得调整的 BCD码 81。
第 3 章 MCS - 51单片机指令系统
二, 减法指令
1.
SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,# data
这组指令的功能是, 将累加器 A的内容与第二操作数及进位标
志相减,结果送回到累加器 A中 。 在执行减法过程中, 如果位 7
( D7) 有借位,则进位标志 Cy置, 1”,否则清, 0”; 如果位 3( D3)
有借位,则辅助进位标志 AC置, 1”,否则清, 0”; 如位 6 有借位而
位 7 没有借位,或位 7 有借位而位 6 没有借位,则溢出标志 OV置
,1”,否则清, 0”。 若要进行不带借位的减法操作,则必须先将 Cy
清, 0”。
第 3 章 MCS - 51单片机指令系统
2,减 1指令
DEC A
DEC Rn
DEC direct
DEC @Ri
这组指令的功能是, 将指出的操作数内容减 1。 如果
原来的操作数为 00H,则减 1 后将产生下溢出,使操作数变
成 0FFH,但不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
三,
乘法指令完成单字节的乘法,只有一条指令,
MUL AB
这条指令的功能是, 将累加器 A的内容与寄存器 B的内
容相乘,乘积的低 8 位存放在累加器 A中,高 8 位存放于寄存
器 B中 。 如果乘积超过 0FFH,则溢出标志 OV置, 1”,否则清
,0”。 进位标志 Cy总是被清, 0”。
第 3 章 MCS - 51单片机指令系统
四, 除法指令
除法指令完成单字节的除法,只有一条指令,
DIV AB
这条指令的功能是, 将累加器 A中的内容除以寄存器 B
中的 8位无符号整数,所得商的整数部分存放在累加器 A中,余
数部分存放在寄存器 B中,清, 0”进位标志 Cy和溢出标志 OV。
若原来 B中的内容为 0,则执行该指令后 A与 B中的内容不
定,并将溢出标志 OV置, 1”,在任何情况下,进位标志 Cy总是
被清, 0”。
第 3 章 MCS - 51单片机指令系统
3.2.4 逻辑运算类指令
表
3.
4
逻
辑
运
算
指
令
第 3 章 MCS - 51单片机指令系统
一, 简单逻辑操作指令
CLR A ; 对累加器 A清, 0”
CPL A; 对累加器 A
RL A; 累加器 A的内容向左环移 1
RLC A; 累加器 A的内容带进位标志位向左环移 1
RR A; 累加器 A的内容向右环移 1
RRC A; 累加器 A的内容带进位标志位向右环移 1
这组指令的功能是, 对累加器 A的内容进行简单的逻辑操
作 。 除了带进位标志位的移位指令外,其它都不影响 Cy,AC,
OV等标志 。
第 3 章 MCS - 51单片机指令系统
二,
ANL A,Rn
ANL A,direct
ANL A,@Ri
ANL A,# data
ANL direct,A
ANL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻
辑与操作,并将结果送回目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
三,
ORL A,Rn
ORL A,direct
ORL A,@Ri
ORL A,# data
ORL direct,A
ORL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻辑或
操作,并将结果送回目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
四,
XRL A,Rn
XRL A,direct
XRL A,@Ri
XRL A,# data
XRL direct,A
XRL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻辑
异或操作,并将结果送回到目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
3.2.5
控制转移指令共有 17 条,不包括按布尔变量控制程序转
移指令 ( 见表 3.5) 。 其中有 64 KB范围内的长调用, 长转移
指令 ; 有 2 KB范围内的绝对调用和绝对转移指令 ; 有全空间的
长相对转移及一页范围内的短相对转移指令 ; 还有多种条件转
移指令 。 由于 MCS -51 提供了较丰富的控制转移指令,因此在
编程上相当灵活方便 。 这类指令用到的助记符共有 10 种,
AJMP,LJMP,SJMP,JMP,ACALL,LCALL,JZ,JNZ、
CJNE,DJNZ。
第 3 章 MCS - 51单片机指令系统
表 3.5 控 制 转 移 指 令
第 3 章 MCS - 51单片机指令系统
一,无条件转移指令
1.
AJMP addr11
这是 2KB范围内的无条件跳转指令,执行该指令时,先
将 PC+2,然后将 addr11送入 PC10~ PC0,而 PC15~ PC11保持不
变 。 这样得到跳转的目的地址 。 需要注意的是,目标地址
与 AJMP后面一条指令的第一个字节必须在同一个 2 KB区
域的存储器区内 。
第 3 章 MCS - 51单片机指令系统
2,相对转移指令
SJMP rel
执行该指令时,先将 PC+2,再把指令中带符号的偏移
量加到 PC上,得到跳转的目标地址送入 PC。
3.
LJMP addr 16
执行该指令时,将 16 位目标地址 addr16 装入 PC,程序无
条件转向指定的目标地址 。 转移的目标地址可以在 64 KB
程序存储器地址空间的任何地方,不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
4,散转指令
JMP @A+DPTR
执行该指令时,把累加器 A中的 8 位无符号数与数据
指针中的 16 位数相加,结果作为下条指令的地址送入 PC,
不改变累加器 A和数据指针 DPTR的内容,也不影响标志 。
利用这条指令能实现程序的散转 。
第 3 章 MCS - 51单片机指令系统
二, 条件转移指令
JZ rel; ( A) = 0
JNZ rel; ( A) ≠0
这类指令是依据累加器 A的内容是否为 0 的条件转移指
令 。 条件满足时转移 ( 相当于一条相对转移指令 ),条件不
满足时则顺序执行下面一条指令 。 转移的目标地址在以下
一条指令的起始地址为中心的 256 个字节范围之内 ( -
128~ +127) 。 当条件满足时,PC←(PC)+N+rel,其中 (PC)为
该条件转移指令的第一个字节的地址,N为该转移指令的字
节数 ( 长度 ),本转移指令 N=2。
第 3 章 MCS - 51单片机指令系统
三,
在 MCS - 51 中没有专门的比较指令,但提供了下面 4 条
比较不相等转移指令,
CJNE A,direct,rel
CJNE A,# data,rel
CJNE Rn,# data,rel
CJNE @Ri,# data,rel
这组指令的功能是, 比较前面两个操作数的大小,如果它
们的值不相等则转移 。 转移地址的计算方法与上述两条指令
相同 。 如果第一个操作数 ( 无符号整数 ) 小于第二个操作数,
则进位标志 Cy置, 1”,否则清, 0”,但不影响任何操作数的内
容 。
第 3 章 MCS - 51单片机指令系统
四, 减 1不为 0
DJNZ Rn,rel
DJNZ direct,rel
这两条指令把源操作数减 1,结果回送到源操作数中
去,如果结果不为 0 则转移 ( 转移地址的计算方法同前 ) 。
第 3 章 MCS - 51单片机指令系统
五,
在程序设计中,通常把具有一定功能的公用程序段编制成
子程序,当主程序需要使用子程序时用调用指令,而在子程序
的最后安排一条子程序返回指令,以便执行完子程序后能返回
主程序继续执行 。
第 3 章 MCS - 51单片机指令系统
1.
ACALL addr11
这是一条 2 KB范围内的子程序调用指令 。 执行该指令
时, 先将 PC+2 以获得下一条指令的地址,然后将 16 位地
址压入堆栈 ( PCL内容先进栈,PCH内容后进栈 ),SP内容加
2,最后把 PC的高 5 位 PC15~ PC11与指令中提供的 11 位地
址 addr11相连接 ( PC15~ PC11,A 10~A 0),形成子程序的入
口地址送入 PC,使程序转向子程序执行 。 所用的子程序的入
口地址必须与 ACALL下面一条指令的第一个字节在同一个
2 KB区域的存储器区内 。
第 3 章 MCS - 51单片机指令系统
2.
LCALL addr16
这条指令无条件调用位于 16 位地址 addr16的子程序 。 执
行该指令时, 先将 PC+3以获得下一条指令的首地址,并把它
压入堆栈 ( 先低字节后高字节 ),SP内容加 2,然后将 16 位
地址放入 PC中,转去执行以该地址为入口的程序 。 LCALL
指令可以调用 64 KB范围内任何地方的子程序 。 指令执行后
不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
3.
RET
这条指令的功能是, 恢复断点,将调用子程序时压入堆栈
的下一条指令的首地址取出送入 PC,使程序返回主程序继续
执行 。
4.
RETI
这条指令的功能与 RET指令相似,不同的是它还要清除
MCS -51 单片机内部的中断状态标志 。
第 3 章 MCS - 51单片机指令系统
3.2.6 位操作类指令
表 3.6 位 操 作 指 令
第 3 章 MCS - 51单片机指令系统
指令中位地址的表达形式有以下几种,
(1) 直接地址方式, 如 0A8H;
(2) 点操作符方式, 如 IE.0;
(3) 位名称方式, 如 EX 0;
(4) 用户定义名方式, 如用伪指令 BIT
WBZD0 BIT EX 0
经定义后,允许指令中使用 WBZD0 代替 EX 0。
第 3 章 MCS - 51单片机指令系统
1,位数据传送指令
MOV C,bit
MOV bit,C
这组指令的功能是, 把源操作数指出的布尔变量送
到目的操作数指定的位地址单元中 。 其中一个操作数必
须为进位标志 Cy,另一个操作数可以是任何可直接寻址
位 。
第 3 章 MCS - 51单片机指令系统
2.
CLR C
CLR bit
CPL C
CPL bit
SETB C
SETB bit
这组指令对操作数所指出的位进行清, 0”#,取反 #,置
,1”的操作,不影响其它标志 。
第 3 章 MCS - 51单片机指令系统
3.
ANL C,bit
ANL C,/bit
这组指令的功能是, 如果源位的布尔值是逻辑 0,则将进
位标志清, 0”; 否则,进位标志保持不变,不影响其它标志 。
bit前的斜杠表示对 (bit)取反,直接寻址位取反后用作源操作数,
但不改变直接寻址位原来的值 。 例如指令, ANL C,/ACC.0
执行前 ACC.0 为 0,C为 1,则指令执行后 C为 1,而 ACC.0仍
为 0。
第 3 章 MCS - 51单片机指令系统
4,位变量逻辑或指令
ORL C,bit
ORL C,/bit
这组指令的功能是, 如果源位的布尔值是逻辑 1,则将进
位标志置, 1”; 否则,进位标志保持不变,不影响其它标志 。
第 3 章 MCS - 51单片机指令系统
5.
JC rel; 若 (Cy)=1,则转移 PC←(PC)+ 2+rel
JNC rel; 若 (Cy)=0,则转移 PC←(PC)+ 2+rel
JB bit,rel; 若 (bit)=1,则转移 PC←(PC)+ 3+rel
JNB bit,rel; 若 (bit)=0,则转移 PC←(PC)+ 3+rel
JBC bit,rel; 若 (bit)=1,则转移 PC←(PC)+3+rel,并 bit← 0
第 3章 MCS - 51单片机指令系统
3.1 寻址方式
3.2 指令系统
第 3 章 MCS - 51单片机指令系统
1.
单字节指令格式由 8位二进制编码表示,例如,
CLR A→E4H
2,双字节指令
双字节指令格式由两个字节组成,操作码和操作数,例如,
MOV A,# 10H→74H 10H
3,三字节指令
三字节指令格式中,第一个字节为操作码,后两个字节为
操作数,例如,
MOV 40H,# 30H→75H 40H 30H
第 3 章 MCS - 51单片机指令系统
一条汇编语言指令中最多包含 4 个区段,如下所示,
[ 标号,] 操作码 [ 操作数 ] [ ;注释 ]
4 个区段之间要用分隔符分开, 标号与操作码之间用
,:,隔开,操作码与操作数之间用空格隔开,操作数与注释
之间用, ;”隔开,如果操作数有两个以上,则在操作数之间要
用逗号,,”隔开 (乘法指令和除法指令除外 )。
第 3 章 MCS - 51单片机指令系统
3.1 寻址方式
所谓寻址方式,就是寻找操作数地址的方式,在用汇编语
言编程时,数据的存放, 传送, 运算都要通过指令来完成 。
编程者必须自始至终都要十分清楚操作数的位置,以及如何
将它们传送到适当的寄存器去参与运算 。 每一种计算机都具
有多种寻址方式 。 寻址方式的多少是反映指令系统优劣的主
要指标之一 。
第 3 章 MCS - 51单片机指令系统
在 MCS -51单片机指令系统中,有以下 7种寻址方式,
( 1) 立即寻址 ;
( 2) 直接寻址 ;
( 3) 寄存器寻址 ;
( 4) 寄存器间接寻址 ;
( 5) 基址寄存器加变址寄存器间接寻址 ;
( 6) 相对寻址 ;
( 7) 位寻址。
第 3 章 MCS - 51单片机指令系统
1.
立即寻址方式是指操作数包含在指令字节中 。 跟在指令
操作码后面的数就是参加运算的数,该操作数称为立即数 。
立即数有一字节和二字节两种可能,例如指令,
MOV A,# 3AH
MOV DPTR,# 0DFFFH
上述两条指令均为立即寻址方式,第一条指令的功能是将
立即数 3AH送累加器 A中,第二条指令的功能是将立即数
0DFFFH送数据指针 DPTR中 ( 0DFH→DPH,0FFH→DPL ) 。
第 3 章 MCS - 51单片机指令系统
2.
在指令中直接给出操作数的地址,这种寻址方式就属于直
接寻址方式 。 在这种方式中,指令的操作数部分直接是操作数
的地址 。
在 MCS -51 单片机指令系统中,直接寻址方式中可以访问 3
种存储器空间,
(1) 内部数据存储器的低 128 个字节单元 ( 00H~ 7FH) 。
(2) 特殊功能寄存器 。 特殊功能寄存器只能用直接寻址方
式进行访问 。
(3) 位地址空间。
第 3 章 MCS - 51单片机指令系统
3,寄存器寻址
在该寻址方式中,参加操作的数存放在寄存器里 。 寄存
器包括 8个工作寄存器 R0~ R7,累加器 A,寄存器 B,数据指
针 DPTR和布尔处理器的位累加器 C。
第 3 章 MCS - 51单片机指令系统
4,寄存器间接寻址
在这种寻址方式中,寄存器的内容为操作数的地址 。 寄存
器间接寻址只能使用寄存器 R0,R1 作为地址指针,寻址内部
RAM区的数据 ; 当访问外部 RAM时,可使用 R0,R1及 DPTR作
为地址指针 。 寄存器间接寻址符号为, @”,例如,
第 3 章 MCS - 51单片机指令系统
5.
这种寻址方式用于访问程序存储器中的数据表格,它以
基址寄存器 DPTR或 PC的内容为基本地址,加上变址寄存器
A的内容作为操作数的地址,例如,
MOVC A,@DPTR+A
JMP @A+DPTR
MOVC A,@ PC+A
第 3 章 MCS - 51单片机指令系统
6,相对寻址
在 MCS -51 指令系统中设有转移指令,分为直接转移
和相对转移指令,在相对转移指令中采用相对寻址方式 。
这种寻址方式是以 PC的内容为基本地址,加上指令中给定
的偏移量作为转移地址 。 指令中给出的偏移量是一个 8 位
带符号的常数,可正可负,其范围为- 128~ +127。
7,位寻址
该种寻址方式中,操作数是内部 RAM单元中某一位的
信息 。
第 3 章 MCS - 51单片机指令系统
3.2 指令系统
3.2.1 指令分类
按指令的功能,MCS -51 指令系统可分为下列 5 类,
(1) 数据传送 ;
(2) 算术运算 ;
(3) 逻辑运算 ;
(4) 位操作 ;
(5) 控制转移。
第 3 章 MCS - 51单片机指令系统
Rn——当前选定的寄存器区中的 8 个工作寄存器 R0~ R7,即
n=0~ 7。
Ri——当前选定的寄存器区中的 2 个寄存器 R0,R1,i=0,1。
direct—— 8 位内部 RAM单元的地址,它可以是一个内部数据
区 RAM单元 (00H~ 7FH)或特殊功能寄存器地址 (I / O端口, 控
制寄存器, 状态寄存器 80H~ 0FFH)。
# data——指令中的 8 位常数 。
# data16——指令中的 16 位常数 。
addr16——16 位的目的地址,用于 LJMP#,LCALL指令,可指
向 64 KB程序存储器地址空间 。
第 3 章 MCS - 51单片机指令系统
addr11——11位的目的地址,用于 AJMP,ACALL指令 。 目
的地址必须与下一条指令的第一个字节在同一个 2 KB程序
存储器地址空间之内 。
rel—— 8 位带符号的偏移量字节,用于 SJMP和所有条件
转移指令中 。 偏移量相对于下一条指令的第一个字节计算,
在- 128~ +127 范围内取值 。
bit——内部数据 RAM或特殊功能寄存器中的可直接寻址
位 。
DPTR——数据指针,可用作 16 位的地址寄存器。
第 3 章 MCS - 51单片机指令系统
A——累加器 。
B——寄存器,用于 MUL和 DIV指令中 。
C——进位标志或进位位 。
@——间接寻址寄存器或基址寄存器的前缀,如 @Ri,@DPTR。
/——位操作数的前缀,表示对该位取反 。
( X) —— X中的内容 。
(( X)) ——由 X寻址的单元中的内容 。
← ——箭头左边的内容被箭头右边的内容所代替。
第 3 章 MCS - 51单片机指令系统
3.2.2 数据传送类指令
图 3 –1 MCS -51传送指令示意图
第 3 章 MCS - 51单片机指令系统
表 3.1 数据传送类指令一览表
第 3 章 MCS - 51单片机指令系统
表 3.1 数据传送类指令一览表
第 3 章 MCS - 51单片机指令系统
1,数据传送到累加器 A
MOV A,R0
MOV A,direct
MOV A,@Ri
MOV A,# data
这组指令的功能是:把源操作数的内容送入累加器 A。
例如, MOV A,# 10H,该指令执行时将立即数 10H送入累
加器 A中 。
第 3 章 MCS - 51单片机指令系统
2,数据传送到工作寄存器 Rn
MOV Rn,A
MOV Rn,direct
MOV Rn,# data
这组指令的功能是, 把源操作数的内容送入当前工作寄
存器区的 R0~ R7中的某一个寄存器 。 指令中 Rn在内部数据
存储器中的地址由当前的工作寄存器区选择位 RS1,RS0 确
定,可以是 00H~ 07H,08H~ 0FH,10H~ 17H,18H~ 1FH。
例如, MOV R0,A,若当前 RS1,RS0 设置为 00 (即工作寄存
器 0 区 ),执行该指令时, 将累加器 A中的数据传送至工作寄
存器 R0(内部 RAM 00H)单元中 。
第 3 章 MCS - 51单片机指令系统
3,数据传送到内部 RAM单元或特殊功能寄存器 SFR的指令
MOV direct,A
MOV direct,Rn
MOV direct,direct
MOV direct,@Ri
MOV direct,# data
MOV @Ri,A
MOV @Ri,direct
MOV @Ri,# data
MOV DPTR,# data16
第 3 章 MCS - 51单片机指令系统
这组指令的功能是:把源操作数的内容送入内部 RAM
单元或特殊功能寄存器 。 其中第三条指令和最后一条指令
都是三字节指令 。 第三条指令的功能很强,能实现内部
RAM之间, 特殊功能寄存器之间或特殊功能寄存器与内部
RAM之间的直接数据传送 。 最后一条指令是将 16位的立即
数送入数据指针寄存器 DPTR。
第 3 章 MCS - 51单片机指令系统
4,累加器 A
MOVX A,@DPTR
MOVX A,@Ri
MOVX @DPTR,A
MOVX @Ri,A
第 3 章 MCS - 51单片机指令系统
这组指令是:在累加器 A与外部数据存储器 RAM单元或
I/O口之间进行数据传送,前两条指令执行时,P3.7 引脚上输出
RD有效信号,用作外部数据存储器的读选通信号 ; 后两条指令
执行时,P3.6 引脚上输出 WR有效信号,用作外部数据存储器
的写选通信号 。 DPTR所包含的 16 位地址信息由 P0 (低 8 位 )
和 P2(高 8 位 )输出,而数据信息由 P0 口传送,P0 口作分时复用
的总线 。 由 Ri作为间接寻址寄存器时,P0 口上分时输出 Ri指
定的 8 位地址信息及传输 8 位数据 。
第 3 章 MCS - 51单片机指令系统
5.
PUSH direct
POP direct
在 MCS -51 单片机的内部 RAM中,可以设定一个先进后
出的区域,称其为堆栈 。 在特殊功能寄存器中有一个堆栈指针
SP,它指出栈顶的位置 。 进栈指令的功能是, 首先将堆栈指针
SP的内容加 1,然后将直接地址所指出的内容送入 SP指出的内
部 RAM单元 ; 出栈指令的功能是, 将 SP所指出的内部 RAM单
元的内容送入由直接地址所指出的字节单元,接着将堆栈指针
SP的内容减 1。
第 3 章 MCS - 51单片机指令系统
例如, 进入中断服务子程序时,把程序状态寄存器 PSW、
累加器 A,数据指针 DPTR进栈保护 。 设当前 SP为 60H。 则
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
执行后,SP内容修改为 64H,而 61H,62H,63H,64H单元中
依次栈入 PSW,A,DPL,DPH的内容 。 当中断服务程序结
束之前,如下程序段 (SP保持 64H不变 )
第 3 章 MCS - 51单片机指令系统
POP DPH
POP DPL
POP ACC
POP PSW
执行之后,SP内容修改为 60H,而 64H,63H,62H,61H
单元中的内容依次弹出到 DPH,DPL,A,PSW中 。
MCS -51 提供一个向上升的堆栈,因此 SP设置初值时要
充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的
使用 。
第 3 章 MCS - 51单片机指令系统
6.
MOVC A,@A+PC
MOVC A,@A+DPTR
这是两条很有用的查表指令,可用来查找存放在外部程序
存储器中的常数表格 。 第一条指令是以 PC作为基址寄存器,A
的内容作为无符号数和 PC的内容 ( 下一条指令的起始地址 )
相加后得到一个 16 位的地址,并将该地址指出的程序存储器单
元的内容送到累加器 A。 这条指令的优点是不改变特殊功能寄
存器和 PC的状态,只要根据 A的内容就可以取出表格中的常数 。
缺点是表格只能放在该条查表指令后面的 256 个单元之中,表
格的大小受到限制,而且表格只能被一段程序所利用 。
第 3 章 MCS - 51单片机指令系统
第二条指令是以 DPTR作为基址寄存器,累加器 A的内容
作为无符号数与 DPTR内容相加,得到一个 16 位的地址,并
把该地址指出的程序存储器单元的内容送到累加器 A。 这条
指令的执行结果只与指针 DPTR及累加器 A的内容有关,与该
指令存放的地址无关,因此,表格的大小和位置可以在 64 KB
程序存储器中任意安排,并且一个表格可以为各个程序块所
共用 。
第 3 章 MCS - 51单片机指令系统
7,字节交换指令
XCH A,Rn
XCH A,@Ri
XCH A,direct
XCHD A,@Ri
SWAP A
前三条指令是将累加器 A的内容和源操作数内容相互交
换 ; 后两条指令是半字节交换指令,最后一条指令是将累加器
A的高 4 位与低 4 位之间进行交换,而另外一条指令是将累加
器 A的低 4 位内容和 ( Ri) 所指出的内部 RAM单元的低 4 位
内容相互交换 。
第 3 章 MCS - 51单片机指令系统
3.2.3 算术运算类指令
表 3.2 算术运算指令
第 3 章 MCS - 51单片机指令系统
表 3.2 算术运算指令
第 3 章 MCS - 51单片机指令系统
表 3.3 影响标志位的指令
第 3 章 MCS - 51单片机指令系统
表
3.
3
影
响
标
志
位
的
指
令
第 3 章 MCS - 51单片机指令系统
一,加法指令
1,普通加法指令
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,# data
第 3 章 MCS - 51单片机指令系统
例如, 120 和 100 之和为 220,显然大于 127,相加时
0 1 1 1 1 0 0 0 120
0 1 1 0 0 1 0 0 100
1 1 0 1 1 1 0 0 220
+
符号位 (最高位 )由 0 变 1,两个正数相加结果变负,实际上它
是和数的最高位,符号位移入了进位标志,此时位 6 有进位而
位 7 无进位,置位溢出标志 OV,结果溢出 。
第 3 章 MCS - 51单片机指令系统
同样,- 120和- 100 相加,结果应为- 220,显然小于-
128,相加时
1 0 0 0 1 0 0 0 -120
1 0 0 1 1 1 0 0 -100+
1 0 0 1 0 0 1 0 0 -220
符号位由 1变为 0,两个负数相加结果变为正数,这是
因为符号位移入进位标志,位 6 无进位而位 7 有进位,置
位溢出标志 OV,由此可判断结果溢出 。
第 3 章 MCS - 51单片机指令系统
2,带进位加法指令
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,# data
这组指令的功能与普通加法指令类似,唯一的不同之处
是,在执行加法时,还要将上一次进位标志 Cy的内容也一起
加进去,对于标志位的影响也与普通加法指令相同 。
第 3 章 MCS - 51单片机指令系统
3.
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
这组指令的功能是:将指令中所指出操作数的内容加 1。 若
原来的内容为 0FFH,则加 1 后将产生溢出,使操作数的内容变成
00H,但不影响任何标志 。 最后一条指令是对 16 位的数据指针寄
存器 DPTR执行加 1 操作,指令执行时,先对低 8 位指针 DPL的内
容加 1,当产生溢出时就对高 8 位指针 DPH加 1,但不影响任何
标志 。
第 3 章 MCS - 51单片机指令系统
4.
DA A
这条指令对累加器 A参与的 BCD码加法运算所获得的 8 位
结果进行十进制调整,使累加器 A中的内容调整为二位压缩型
BCD码的数 。 使用时必须注意,它只能跟在加法指令之后,不
能对减法指令的结果进行调整,且其结果不影响溢出标志位 。
执行该指令时,判断 A中的低 4 位是否大于 9 和辅助进
位标志 AC是否为, 1”,若两者有一个条件满足,则低 4 位加
6 操作 ; 同样,A中的高 4 位大于 9 或进位标志 Cy为, 1”两者
有一个条件满足时,高 4 位加 6 操作 。 例如, 有两个 BCD数 36
与 45 相加,结果应为 BCD码 81,程序如下,
第 3 章 MCS - 51单片机指令系统
MOV A,# 36H
ADD A,# 45H
DA A
这段程序中,第一条指令将立即数 36H(BCD码 36)送入累
加器 A; 第二条指令进行如下加法,
0 0 1 1 0 1 1 0 36
0 1 0 0 0 1 0 1 45
0 1 1 1 1 0 1 1 7B
0 0 0 0 0 1 1 0 06+
+
1 0 0 0 0 0 0 1 81
得结果 7BH; 第三条指令对累加器 A进行十进制调整,低 4 位
(为 0BH)大于 9,因此要加 6,得调整的 BCD码 81。
第 3 章 MCS - 51单片机指令系统
二, 减法指令
1.
SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,# data
这组指令的功能是, 将累加器 A的内容与第二操作数及进位标
志相减,结果送回到累加器 A中 。 在执行减法过程中, 如果位 7
( D7) 有借位,则进位标志 Cy置, 1”,否则清, 0”; 如果位 3( D3)
有借位,则辅助进位标志 AC置, 1”,否则清, 0”; 如位 6 有借位而
位 7 没有借位,或位 7 有借位而位 6 没有借位,则溢出标志 OV置
,1”,否则清, 0”。 若要进行不带借位的减法操作,则必须先将 Cy
清, 0”。
第 3 章 MCS - 51单片机指令系统
2,减 1指令
DEC A
DEC Rn
DEC direct
DEC @Ri
这组指令的功能是, 将指出的操作数内容减 1。 如果
原来的操作数为 00H,则减 1 后将产生下溢出,使操作数变
成 0FFH,但不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
三,
乘法指令完成单字节的乘法,只有一条指令,
MUL AB
这条指令的功能是, 将累加器 A的内容与寄存器 B的内
容相乘,乘积的低 8 位存放在累加器 A中,高 8 位存放于寄存
器 B中 。 如果乘积超过 0FFH,则溢出标志 OV置, 1”,否则清
,0”。 进位标志 Cy总是被清, 0”。
第 3 章 MCS - 51单片机指令系统
四, 除法指令
除法指令完成单字节的除法,只有一条指令,
DIV AB
这条指令的功能是, 将累加器 A中的内容除以寄存器 B
中的 8位无符号整数,所得商的整数部分存放在累加器 A中,余
数部分存放在寄存器 B中,清, 0”进位标志 Cy和溢出标志 OV。
若原来 B中的内容为 0,则执行该指令后 A与 B中的内容不
定,并将溢出标志 OV置, 1”,在任何情况下,进位标志 Cy总是
被清, 0”。
第 3 章 MCS - 51单片机指令系统
3.2.4 逻辑运算类指令
表
3.
4
逻
辑
运
算
指
令
第 3 章 MCS - 51单片机指令系统
一, 简单逻辑操作指令
CLR A ; 对累加器 A清, 0”
CPL A; 对累加器 A
RL A; 累加器 A的内容向左环移 1
RLC A; 累加器 A的内容带进位标志位向左环移 1
RR A; 累加器 A的内容向右环移 1
RRC A; 累加器 A的内容带进位标志位向右环移 1
这组指令的功能是, 对累加器 A的内容进行简单的逻辑操
作 。 除了带进位标志位的移位指令外,其它都不影响 Cy,AC,
OV等标志 。
第 3 章 MCS - 51单片机指令系统
二,
ANL A,Rn
ANL A,direct
ANL A,@Ri
ANL A,# data
ANL direct,A
ANL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻
辑与操作,并将结果送回目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
三,
ORL A,Rn
ORL A,direct
ORL A,@Ri
ORL A,# data
ORL direct,A
ORL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻辑或
操作,并将结果送回目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
四,
XRL A,Rn
XRL A,direct
XRL A,@Ri
XRL A,# data
XRL direct,A
XRL direct,# data
这组指令的功能是, 将两个操作数的内容按位进行逻辑
异或操作,并将结果送回到目的操作数的单元中 。
第 3 章 MCS - 51单片机指令系统
3.2.5
控制转移指令共有 17 条,不包括按布尔变量控制程序转
移指令 ( 见表 3.5) 。 其中有 64 KB范围内的长调用, 长转移
指令 ; 有 2 KB范围内的绝对调用和绝对转移指令 ; 有全空间的
长相对转移及一页范围内的短相对转移指令 ; 还有多种条件转
移指令 。 由于 MCS -51 提供了较丰富的控制转移指令,因此在
编程上相当灵活方便 。 这类指令用到的助记符共有 10 种,
AJMP,LJMP,SJMP,JMP,ACALL,LCALL,JZ,JNZ、
CJNE,DJNZ。
第 3 章 MCS - 51单片机指令系统
表 3.5 控 制 转 移 指 令
第 3 章 MCS - 51单片机指令系统
一,无条件转移指令
1.
AJMP addr11
这是 2KB范围内的无条件跳转指令,执行该指令时,先
将 PC+2,然后将 addr11送入 PC10~ PC0,而 PC15~ PC11保持不
变 。 这样得到跳转的目的地址 。 需要注意的是,目标地址
与 AJMP后面一条指令的第一个字节必须在同一个 2 KB区
域的存储器区内 。
第 3 章 MCS - 51单片机指令系统
2,相对转移指令
SJMP rel
执行该指令时,先将 PC+2,再把指令中带符号的偏移
量加到 PC上,得到跳转的目标地址送入 PC。
3.
LJMP addr 16
执行该指令时,将 16 位目标地址 addr16 装入 PC,程序无
条件转向指定的目标地址 。 转移的目标地址可以在 64 KB
程序存储器地址空间的任何地方,不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
4,散转指令
JMP @A+DPTR
执行该指令时,把累加器 A中的 8 位无符号数与数据
指针中的 16 位数相加,结果作为下条指令的地址送入 PC,
不改变累加器 A和数据指针 DPTR的内容,也不影响标志 。
利用这条指令能实现程序的散转 。
第 3 章 MCS - 51单片机指令系统
二, 条件转移指令
JZ rel; ( A) = 0
JNZ rel; ( A) ≠0
这类指令是依据累加器 A的内容是否为 0 的条件转移指
令 。 条件满足时转移 ( 相当于一条相对转移指令 ),条件不
满足时则顺序执行下面一条指令 。 转移的目标地址在以下
一条指令的起始地址为中心的 256 个字节范围之内 ( -
128~ +127) 。 当条件满足时,PC←(PC)+N+rel,其中 (PC)为
该条件转移指令的第一个字节的地址,N为该转移指令的字
节数 ( 长度 ),本转移指令 N=2。
第 3 章 MCS - 51单片机指令系统
三,
在 MCS - 51 中没有专门的比较指令,但提供了下面 4 条
比较不相等转移指令,
CJNE A,direct,rel
CJNE A,# data,rel
CJNE Rn,# data,rel
CJNE @Ri,# data,rel
这组指令的功能是, 比较前面两个操作数的大小,如果它
们的值不相等则转移 。 转移地址的计算方法与上述两条指令
相同 。 如果第一个操作数 ( 无符号整数 ) 小于第二个操作数,
则进位标志 Cy置, 1”,否则清, 0”,但不影响任何操作数的内
容 。
第 3 章 MCS - 51单片机指令系统
四, 减 1不为 0
DJNZ Rn,rel
DJNZ direct,rel
这两条指令把源操作数减 1,结果回送到源操作数中
去,如果结果不为 0 则转移 ( 转移地址的计算方法同前 ) 。
第 3 章 MCS - 51单片机指令系统
五,
在程序设计中,通常把具有一定功能的公用程序段编制成
子程序,当主程序需要使用子程序时用调用指令,而在子程序
的最后安排一条子程序返回指令,以便执行完子程序后能返回
主程序继续执行 。
第 3 章 MCS - 51单片机指令系统
1.
ACALL addr11
这是一条 2 KB范围内的子程序调用指令 。 执行该指令
时, 先将 PC+2 以获得下一条指令的地址,然后将 16 位地
址压入堆栈 ( PCL内容先进栈,PCH内容后进栈 ),SP内容加
2,最后把 PC的高 5 位 PC15~ PC11与指令中提供的 11 位地
址 addr11相连接 ( PC15~ PC11,A 10~A 0),形成子程序的入
口地址送入 PC,使程序转向子程序执行 。 所用的子程序的入
口地址必须与 ACALL下面一条指令的第一个字节在同一个
2 KB区域的存储器区内 。
第 3 章 MCS - 51单片机指令系统
2.
LCALL addr16
这条指令无条件调用位于 16 位地址 addr16的子程序 。 执
行该指令时, 先将 PC+3以获得下一条指令的首地址,并把它
压入堆栈 ( 先低字节后高字节 ),SP内容加 2,然后将 16 位
地址放入 PC中,转去执行以该地址为入口的程序 。 LCALL
指令可以调用 64 KB范围内任何地方的子程序 。 指令执行后
不影响任何标志 。
第 3 章 MCS - 51单片机指令系统
3.
RET
这条指令的功能是, 恢复断点,将调用子程序时压入堆栈
的下一条指令的首地址取出送入 PC,使程序返回主程序继续
执行 。
4.
RETI
这条指令的功能与 RET指令相似,不同的是它还要清除
MCS -51 单片机内部的中断状态标志 。
第 3 章 MCS - 51单片机指令系统
3.2.6 位操作类指令
表 3.6 位 操 作 指 令
第 3 章 MCS - 51单片机指令系统
指令中位地址的表达形式有以下几种,
(1) 直接地址方式, 如 0A8H;
(2) 点操作符方式, 如 IE.0;
(3) 位名称方式, 如 EX 0;
(4) 用户定义名方式, 如用伪指令 BIT
WBZD0 BIT EX 0
经定义后,允许指令中使用 WBZD0 代替 EX 0。
第 3 章 MCS - 51单片机指令系统
1,位数据传送指令
MOV C,bit
MOV bit,C
这组指令的功能是, 把源操作数指出的布尔变量送
到目的操作数指定的位地址单元中 。 其中一个操作数必
须为进位标志 Cy,另一个操作数可以是任何可直接寻址
位 。
第 3 章 MCS - 51单片机指令系统
2.
CLR C
CLR bit
CPL C
CPL bit
SETB C
SETB bit
这组指令对操作数所指出的位进行清, 0”#,取反 #,置
,1”的操作,不影响其它标志 。
第 3 章 MCS - 51单片机指令系统
3.
ANL C,bit
ANL C,/bit
这组指令的功能是, 如果源位的布尔值是逻辑 0,则将进
位标志清, 0”; 否则,进位标志保持不变,不影响其它标志 。
bit前的斜杠表示对 (bit)取反,直接寻址位取反后用作源操作数,
但不改变直接寻址位原来的值 。 例如指令, ANL C,/ACC.0
执行前 ACC.0 为 0,C为 1,则指令执行后 C为 1,而 ACC.0仍
为 0。
第 3 章 MCS - 51单片机指令系统
4,位变量逻辑或指令
ORL C,bit
ORL C,/bit
这组指令的功能是, 如果源位的布尔值是逻辑 1,则将进
位标志置, 1”; 否则,进位标志保持不变,不影响其它标志 。
第 3 章 MCS - 51单片机指令系统
5.
JC rel; 若 (Cy)=1,则转移 PC←(PC)+ 2+rel
JNC rel; 若 (Cy)=0,则转移 PC←(PC)+ 2+rel
JB bit,rel; 若 (bit)=1,则转移 PC←(PC)+ 3+rel
JNB bit,rel; 若 (bit)=0,则转移 PC←(PC)+ 3+rel
JBC bit,rel; 若 (bit)=1,则转移 PC←(PC)+3+rel,并 bit← 0