第三章 MCS-51 指令系统
1 1
3.1 MCS-51指令系统概述
3.2 寻址方式
3.3 指令系统第 3章 MCS-51的指令系统第三章 MCS-51 指令系统
1 2
3.2 寻址方式寻址:获得操作数所在的地址的方法 。
7种寻址方式:
立即寻址寄存器寻址直接寻址寄存器间接寻址基址加变址寻址相对寻址位寻址。
第三章 MCS-51 指令系统
1 3
3.2.1 立即寻址指令中直接给出操作数的寻址方式 。
立即数,8位或 16位 。
例如,MOV A,#20H ; A← 20H
MOV 20H,#20H ; 20H← 20H
MOV DPTR,#2000H ; DPTR ← 2000H
第三章 MCS-51 指令系统
1 4
3.2.2 直接寻址指令中直接给出操作数所在地址的寻址方式 。
操所数所在区域:
( 1) 内部 RAM的低 128单元;
( 2) 特殊功能寄存器 。
例如,MOV A,20H ; A← ( 20H)
MOV 30H,20H ; 30H← ( 20H)
MOV SP,#30H ; SP← 30H
第三章 MCS-51 指令系统
1 5
3.2.3 寄存器寻址以通用寄存器的内容为操作数的寻址方式 。
可用的寄存器:通用寄存器 R0~R7和若干 SFR,例如,A,B
和 DPTR。
其中 B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址 。 A既可以是直接寻址,也可以是寄存器寻址 。
例如,MOV 20H,A ; 20H ← ( A )
MUL AB ; BA←(A) × (B)
MOV B,R0 ; B←(R 0)
第三章 MCS-51 指令系统
1 6
其中:
B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。
A既可以是直接寻址,也可以是寄存器寻址。
直接寻址和寄存器寻址的差别在于直接寻址是以操作数所在的单元地址 (占一个字节 )出现在指令码中,而寄存器寻址是寄存器编码出现在指令码中。由于可用作寄存器寻址的寄存器少、编码位数少 (少于三位二进制数 ),通常操作码和寄存器编码合用一个字节,因此寄存器寻址的指令机器码短,执行快。
除了上面所指的几个寄存器外的特殊功能寄存器一律属于直接寻址。
第三章 MCS-51 指令系统
1 7
3.2.4 寄存器间接寻址以寄存器中的内容为地址,以该地址中的内容为操作数的寻址方式称为寄存器间接寻址 。
可用的 寄存器,R0,R1和 DPTR。
在寄存器的名称前面加前缀标志,@,以区别于寄存器寻址方式 。 例如,
MOV A,@ R0 ; A←((R 0))
第三章 MCS-51 指令系统
1 8
34 H
内部
RA M
56 HSFR
56 H低 128
单元
00 H ( R 0 )
34 H
0 E 0 H ( A )
地址
图 3-4 指令 MOV A,@R0的操作示意图若 (R0)=34H,(34H)=56H
MOV A,@ R0 ; A←((R0))
第三章 MCS-51 指令系统
1 9
寄存器间接寻址的寻址范围:片内 RAM和片外 RAM。
当寻址片内 RAM时,使用 R0或 R1作间址寄存器,其通用形式为 @Ri( i=0或 1) 。
当寻址片外 RAM时,使用 DPTR作间址寄存器,其通用形式为 @DPTR。
MOV A,@ R0 ; A←((R 0)),
MOV @R1,A ; ((R0))←A
MOVX A,@ R0 ; A←((R 0))
MOVX A,@ DPTR ; A←((DPTR))
第三章 MCS-51 指令系统
1 10
3.2.5 变址寻址 (或基址加变址寻址 )
以 DPTR或 PC作基址寄存器,累加器 A作变址寄存器,并以两者内容相加形成的 16位地址作为操作数地址的寻址方式称为变址寻址,或基址加变址寻址方式 。
寻址空间:程序存储器 ROM。
指令,MOVC
例如:
ORG 1000H
MOVC A,@ A+DPTR; A←((A)+(DPTR)),机器码为 93H
若 ( DPTR) =2030H,( A) =50H
第三章 MCS-51 指令系统
1 11
图 3-5 指令 MOVC A,@ A+DPTR的操作示意图
2030H+50H=2080H
SFR
50 H
20 H
30 H
D PH
D PL
R O M
93 H1000 H
56 H2080 H
A
若( DPTR) =2030H,( A) =50H
第三章 MCS-51 指令系统
1 12
(1) 变址寻址方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式 。
(2) 变址寻址的指令只有三条
MOVC A,@ A+ DPTR
MOVC A,@ A+ PC
JMP @ A+ DPTR
其中前两条是程序存储器读指令,后一条是无条件转移指令 。
(3) 尽管变址寻址方式操作较为复杂,但变址寻址指令都是一字节指令。
第三章 MCS-51 指令系统
1 13
3.2.6 相对寻址以当前程序计数器 PC的当前值 (指读出该条跳转指令后,PC
所指的下条指令的地址 )为基值,加上指令给出的相对偏移量
rel,形成新 PC值,即跳转目标地址的寻址方式称为相对寻址 。
该寻址方式主要用于通过修改 PC值而实现程序的分支转移 。
例如:
ORG 2000H
JZ rel ;双字节指令
rel为一字节补码数,范围为- 128~ 127。
第三章 MCS-51 指令系统
1 14
JZ指令表示:
若 (A)≠ 0,则程序顺序执行,即不跳转,PC= PC+2;
若 (A)= 0,则以 PC的当前值为基地址,加上偏移量 rel后所得到的结果为该跳转指令的目标地址 。
假设 rel=30H,则该指令目标代码为 60H,30H,分别存放于
ROM 2000H和 2001H单元,PC的当前值= 2000H+ 2=2002H。
若目前 (A)= 0,则程序跳转,
跳转的目标地址= PC的当前值+ rel= 2002H+ 30H= 2032H。。
第三章 MCS-51 指令系统
1 15
图 3-6 变址寻址操作示意图
RO M
60 H
30 H
xx
xx
地址
2000 H
2001 H
2002 H
2032 H
条件,( A ) = 0
A L U
PC 当前值目标地址
( 新 PC 值 )
JC re l
re l = 30 H
PC = 2002 H
第三章 MCS-51 指令系统
1 16
3.2.7 位寻址方式在进行位操作时,借助于进位位 C作为操作累加器 。
例如,MOV 20H,C; 20H← ( CY),20H是位寻址的位地址
MOV A,20H; A← ( 20H),20H是直接寻址的字节地址第三章 MCS-51 指令系统
1 17
MCS- 51位寻址范围,
① 内部 RAM中的位寻址区 。
单元地址为 20H~ 2FH,共 16个单元 128位,位地址是 00H
~ 7FH( 详见表 2-4) 。
② 专用寄存器的可寻址位 。
实际寻址位 83位 。 对这些寻址位在指令中有如下四种表示方法
·直接使用位地址,D6H
·位名称表示方法,AC
·单元地址加位的表示方法,D0H.6
·专用寄存器符号加位的表示方法,PSW.6。
第三章 MCS-51 指令系统
1 18
D7 D6 D5 D4 D3 D2 D1 D0
Cy AC F0 RS1 RS0 OV … P
第三章 MCS-51 指令系统
1 19
说明,源操作数和目的操作数各有自己的寻址方式 。
MOV 50H,R1
源操作数:寄存器寻址方式,
目的操作数:直接寻址方式,
指令的功能:把按寄存器寻址取出的 R1内容再以直接寻址方式存放于内部 RAM的 50H单元中 。
第三章 MCS-51 指令系统
1 20
7 种寻址方式及使用空间第三章 MCS-51 指令系统
1 21
3.3 指令系统
5大类:
数据传送类指令,
算术运算类指令,
逻辑运算类指令,
控制转移类指令位操作类指令 。
共计 111条指令

第三章 MCS-51 指令系统
1 22
3.3.1 数据传送类指令指令功能,一般是把源操作数传输到目的操作数,指令执行后,源操作数不变,而目的操作数修改为源操作数 。
1,内部 RAM数据传送指令组单片机芯片内部数据传送范围,寄存器,累加器,专用寄存器以及 RAM单元 。 分类介绍:
( 1) 以累加器 A为目的操作数的指令:
MOV A,Rn ; A← ( Rn),Rn= R0~ R7
MOV A,direct ; A← ( direct)
MOV A,@Ri ; A← (( Ri)),Ri= R0,R1
MOV A,#data ; A← data
功能:将源操作数所指定的内容送入累加器 A。
第三章 MCS-51 指令系统
1 23
( 2) 以寄存器 Rn为目的操作数的指令:
MOV Rn,A ; Rn← ( A),Rn= R0~ R7
MOV Rn,direct ; Rn← ( direct)
MOV Rn,#data ; Rn← data
功能:将源操作数所指定的内容送到当前工作寄存器组 R0
~ R7中的某个寄存器中 。
第三章 MCS-51 指令系统
1 24
例如:
( A) = 78H,( R5) = 47H,( 70H) = 0F2H,
执行指令:
MOV R5,A ; R5← ( A),( R5) = 78H
MOV R5,70H ; R5← ( 70H),( R5) = 0F2H
MOV R5,#0A3H ; R5← 0A3H,( R5) = 0A3H
注意,8051指令系统中无 MOV Rn,Rn
第三章 MCS-51 指令系统
1 25
( 3) 以直接地址为目的操作数的指令:
MOV direct,A ; direct← ( A)
MOV direct,Rn ; direct← ( Rn)
MOV direct,direct ; direct← ( direct)
MOV direct,@Ri ; direct← (( Ri))
MOV direct,#data ; direct← data
功能:将源操作数所指定的内容送入由直接地址 direct所指定的片内存储器中 。
第三章 MCS-51 指令系统
1 26
( 4) 以间接地址为目的地址操作数的指令:
MOV @Ri,A ; ( Ri) ← ( A)
MOV @Ri,direct ; ( Ri) ← ( direct)
MOV @Ri,#data ; ( Ri) ← data
功能:将源操作数所指定的内容送入以 R0或 R1为地址指针的片内存储器单元中 。
第三章 MCS-51 指令系统
1 27
@Ri direct Rn
ACC#data
图 3-4 传送指令在片内的操作功能第三章 MCS-51 指令系统
1 28
( 5) 十六位数据传送指令:
MOV DPTR,#data16; DPH←dataH,DPL←dataL
唯一的 16位立即数传送指令 。
第三章 MCS-51 指令系统
1 29
例 3-1,设内部 RAM ( 30H) =40H,( 40H) =10H,
( 10H) =00H,( P1) =0CAH,分析以下程序执行后,各单元及寄存器,P2口的内容 。
MOV R0,#30H ; R0← 30H
MOV A,@R0 ; A← (( R0))
MOV R1,A ; R1← ( A)
MOV B,@R1 ; B← (( R1))
MOV @R1,P1 ; ( R1) ← ( P1)
MOV P2,P1 ; P2← ( P1)
MOV 10H,#20H ; 10H← 20H
结果,( R0) =30H; ( R1) =( A) =40H; ( B) =10H; ( 40H) =( P1) =( P2) =0CAH; ( 10H) =20H。
第三章 MCS-51 指令系统
1 30
2,外部 RAM数据传送指令组寻址方式,寄存器间接寻址方式,使用 DPTR,Ri作间址寄存器 。
( 1) 使用 DPTR进行间接寻址
MOVX A,@DPTR ; A← (( DPTR))
MOVX @DPTR,A ; ( DPTR) ← ( A)
指令的寻址范围,64KB。
( 2) 使用 Ri进行间接寻址
MOVX A,@Ri ; A← (( Ri))
MOVX @Ri,A ; ( Ri) ← ( A)
i=0或 1。
指令的寻址范围,只限于外部 RAM的低 256单元 。
第三章 MCS-51 指令系统
1 31
例 3-2,设外部 RAM ( 2023H) =0FH,执行以下指令:
MOV DPTR,#2023H ; DPTR← 2023H
MOVX A,@ DPTR ; A← (( DPTR))
MOV 30H,A ; 30H← ( A)
MOV A,#00H ; A← 00H
MOVX @ DPTR,A ; ( DPTR) ← ( A)
结果,( DPTR) =2023H,( 30H) =0FH,( A) =00H,
( 2023H) =00H。
第三章 MCS-51 指令系统
1 32
对外部 RAM数据传送指令作如下 说明,
① 外部数据存储器数据传送指令就是外部 RAM的读写指令 。
② 外部 RAM数据传送指令与内部 RAM数据传送指令的助记符不同 。
内部 RAM,MOV,
外部 RAM,MOVX。 增加的,X”表示外部之意 。
③ 外部 RAM传送,只能通过累加器 A进行。
第三章 MCS-51 指令系统
1 33
A寄存器寄存器间接寻址
@R1,@R0
(外部 RAM 0~255B)
寄存器间接寻址
@DPTR
(外部 RAM 0~64KB)
图 3-5 外部数据存储器传送操作示意图第三章 MCS-51 指令系统
1 34
3,程序存储器数据传送指令组 ( 查表指令 ),
ROM,内部 ROM,外部 ROM。
对 ROM的操作:只能读,不能写 。
该类指令仅有两条,。
MOVC A,@A+PC; PC← ( PC) +1,A← (( A) +( PC))
MOVC A,@A+DPTR; A← (( A) +( DPTR))
第三章 MCS-51 指令系统
1 35
累加器 A内 8位无符号数 。
1字节指令 。
变址寻址方式 。
作用:常用于查表操作,又称 查表专用指令 。
二者的区别,PC的查表范围在 256B内 。 称近程查表 。
DPTR可赋予某指定的查表地址,其范围可达整个程序存储器的 64KB空间,称远程查表 。
第三章 MCS-51 指令系统
1 36
地址

3000H
3001H
3002H

3009H
ROM
00H
01H
04H

51H
例 3-3:在外部程序存储器中,从 3000H单元开始依次存放 0~9十个数的平方值,0,1,4,…,81。 要求将存放在内部 RAM
40H单元的一个数据 ( 0~9) 的平方值查表求出,并存放在内部
RAM的 50H单元,数据存放如图 3-6所示 。
第三章 MCS-51 指令系统
1 37
程序段如下:
MOV A,40H ;
MOV DPTR,#3000H ; DPTR指向表头
MOVC A,@A+DPTR ;查表并将结果存于 A中
MOV 50H,A ;存平方值
… … …
3000H DB 0,1,4,9,16,25,36,49,64,81
… … …
若 ( 40H) =09H,
则,( A) =( 50H) =51H( 81的十六进制表示)。
第三章 MCS-51 指令系统
1 38
实际使用以 DPTR为基址寄存器的查表指令时,一般将,表头,处赋予一个标号,将 DPTR直接指在这一标号上即可 。
MOV A,40H
MOV DPTR,#TAB ; DPTR指向表头
MOVC A,@A+DPTR ;查表并将结果存于 A中
MOV 50H,A ;存平方值
… … …
TAB,DB 0,1,4,9,16,25,36,49,64,81
第三章 MCS-51 指令系统
1 39
例 3-4,以查表方法把累加器 A中的十六进制数转换为 ASCII
码,并送回累加器 。 其查表程序段如下:
第三章 MCS-51 指令系统
1 40
1000 HEXASCII,INC A
1001 MOVC A,@A+ PC
1002 RET
1003 DB 30H
1004 DB 31H
1005 DB 32H
┇ ┇ ┇
100C DB 39H
100D DB 41H
100E DB 42H
100F DB 43H
1010 DB 44H
1011 DB 45H
1012 DB 46H
第三章 MCS-51 指令系统
1 41
假定 A中的十六进制数为 00H,加 1后为 01H,取出 MOVC
指令后,( PC) = 1002H,( A) + ( PC) = 1003H,从
1003H单元取得数据送 A,则 ( A) = 30H,此即为十六进制数 0的 ASCII值 。
查表之前 A加 1是因为 MOVC指令与数据表之间有 1个单元地址的间隔 ( RET指令 ) 。
第三章 MCS-51 指令系统
1 42
4,数据交换指令组数据交换主要是在 内部 RAM单元 与 累加器 A之间进行 。
有 整字节 和 半字节 交换指令两种 。
( 1) 整字节交换指令
XCH A,Rn ; ( A) ←→ ( Rn)
XCH A,direct ; ( A) ←→ ( direct)
XCH A,@Ri ; ( A) ←→ (( Ri))
第三章 MCS-51 指令系统
1 43
( 2) 半字节交换指令:
XCHD A,@Ri ; ( A) 3~0 ←→ (( Ri)) 3~0
( 3) 累加器高低半字节交换指令:
SWAP A ; ( A) 3~0 ←→ ( A) 7~ 4
例如,若 ( R0) = 5BH,( 5BH) = 6 DH,( A) = 0 0H,
指令,XCHD A,@R0
结果,( A) = 0DH,( 5BH) = 60H。
若 ( A) = 80H,
指令,SWAP A
结果,( A) = 08H。
第三章 MCS-51 指令系统
1 44
5,堆栈操作指令组:
进栈,出栈两种操作 。
PUSH direct ; SP← ( SP) +1,( SP) ← ( direct)
POP direct ; direct←((SP)),SP← ( SP) - 1
注意,使用堆栈前,需设定 SP的初始值 。
寻址方式,以 SP为间址寄存器的间接寻址方式 。
第三章 MCS-51 指令系统
1 45
例 3-5,已知片内 RAM 40H单元中存放数据为 80H,设堆栈指针为 30H,把此数值压入堆栈,然后再弹出到 41H单元中 。
指令如下:
MOV SP,#30H ; SP← 30H
PUSH 40H ; SP←( SP)+1,( 31H) ← ( 40H)
POP 41H ; 41H← ( 31),(SP)← ( SP) - 1
第三章 MCS-51 指令系统
1 46
FF
80

80
56
41H
40H
31H
30H SP
压入
80
80

80
56
41H
40H
31H
30H
SP
弹出第三章 MCS-51 指令系统
1 47
堆栈操作应 遵循“先进后出”的原则 。
例如,PUSH A
PUSH PSW

POP PSW
POP A
数据 得到了保存。
若 改为:
PUSH A
PUSH PSW

POP A
POP PSW
则 A和 PSW的内容发生了互换。
第三章 MCS-51 指令系统
1 48
6,数据传送类指令说明
( 1) 同样的数据传送,可以使用不同寻址方式的指令来实现 。
例如:把累加器 A的内容送内部 RAM 26H单元,可由以下不同的指令完成:
① MOV 26H,A
② MOV R0,# 26H
MOV @ R0,A
③ MOV 26H,0E0H
④ PUSH ACC
POP 26H
实际应用根据具体情况决定 。
第三章 MCS-51 指令系统
1 49
( 2)数据传送类指令一般不影响程序状态字 PSW。
交换型传送指令不丢失目的操作数,它只使将源操作数和目的操作数交换了存放单元。
传送类指令一般不影响标志位。
但堆栈指令( PUSH和 POP)可以直接修改状态字 PSW。
例如,PUSH 40H
POP PSW
第三章 MCS-51 指令系统
1 50
24条指令,完成加、减、乘、除等算术运算。
1.加法指令组:( 8位)
ADD A,Rn ; A← ( A) +( Rn)
ADD A,direct ; A← ( A) +( direct)
ADD A,@Ri ; A← ( A) +(( Ri) )
ADD A,#data ; A← ( A) +data
3.3.2 算术运算类指令第三章 MCS-51 指令系统
1 51
加法运算影响 PSW位的状态。
如果位 3有进位,则辅助位标志 AC置 1,否则 AC清 0;
如果位 7有进位,则进位标志 CY置 1,否则 CY清 0。
两个带符号数相加,还有溢出的问题。如果运算结果使溢出标志 OV置 1,则表示有溢出出现。
第三章 MCS-51 指令系统
1 52
1 1 0 0,0 0 1 1 B
+ 1 0 1 0,1 0 1 0 B
1 0 1 1 0 1 1 0 1 B
C6= 0
C7= 1
= 1,所以有溢出 。
结果,( A) =6DH,( AC) = 0,( CY) = 1,( OV) =1
,P= 1,PSW= 84H
67 CCOF
Cy AC F0 RS1 RS0 OV … P
1 0 0 0 0 1 0 0 84H
第三章 MCS-51 指令系统
1 53
2,带进位加法指令组:
三个数参加运算:累加器 A,不同寻址方式的加数,以及进位标志位 CY,运算结果送累加器 A。
ADDC A,Rn ; A← ( A) +( Rn) +( CY)
ADDC A,direct ; A← ( A) +( direct) +( CY)
ADDC A,@Ri ; A← ( A) +( Ri) +( CY)
ADDC A,#data ; A← ( A) +data+( CY)
带进位加法运算指令常用于 多字节数的加法运算 。
第三章 MCS-51 指令系统
1 54
例 3-7,设三字节无符号数相加,
被加数放在内部 RAM,20H~ 22H单元 ( 低位在前 ),
加数放在内部 RAM,30H~ 32H单元 ( 低位在前 ),
和存于,40~ 42H 单元,
进位位:,43H 单元 。
利用 ADDC指令进行多字节加法运算 。
第三章 MCS-51 指令系统
1 55
CLR C
MOV A,20H ;取低字节被加数
ADDC A,30H ;低位字节相加
MOV 40H,A ;结果送 40H单元
MOV A,21H ;取中间字节被加数
ADDC A,31H ;中间字节相加
MOV 41H,A ;结果送 41H单元
MOV A,22H ;取高字节被加数
ADDC A,32H ;高位字节相加
MOV 42H,A ;结果送 42H单元
MOV A,#0 ; A清零
ADDC A,#0 ;加进位位
MOV 43H,A ;存进位位于 43H单元第三章 MCS-51 指令系统
1 56
3,带借位减法指令组:
带 借 位减法指令也有四条:
SUBB A,Rn ; A← ( A) - ( Rn) - ( CY)
SUBB A,direct ; A← ( A) - ( direct) - ( CY)
SUBB A,@Ri ; A← ( A) - (( Ri) )- ( CY)
SUBB A,#data ; A← ( A) - data- ( CY)
若进行 不带借位 的减法运算,需用 CLR C 把 进位标志位清 0即可 。
第三章 MCS-51 指令系统
1 57
带借位减法指令影响 PSW的状态,
如果 位 3有借位,则 AC置 1,否则清 0;
如果 位 7有借位,则 CY置 1,否则 CY清 0;
另外,两个带符号数相减也有溢出的问题,如溢出,则 OV
置 1,否则,清 0。
第三章 MCS-51 指令系统
1 58
例 3-8:若( A)= D4H,( R2) =6CH,求两者相减结果。
CLR C
SUBB A,R2
1 1 0 1,0 1 0 0 B
- 0 1 1 0,1 1 0 0 B
0 1 1 0,1 0 0 0 B
执行后,( A)= 68H,( CY)= 0,( OV) =1,( AC) =1
,( P) =1。
第三章 MCS-51 指令系统
1 59
例 3-9:两字节数相减,被减数在 20H,21H; 减数在
30H,31H; 差在 40H,41H( 低位在前 ),若高字节相减有 借位,则转 OVER处 。 可编程如下:
MOV A,20H ;低字节被减数送 A
CLR C ;开始未借位,清 C
SUBB A,30H ;低字节相减
MOV 40H,A ;低字节差送入 40H
MOV A,21H ;高字节被减数送 A
SUBB A,31H ;高字节相减
MOV 41H,A ;高字节差送入 41H
JC OVER ;若 C=1,转 OVER处

OVER,……

第三章 MCS-51 指令系统
1 60
4,加 1指令组 ( 5条 )
INC A ; A← ( A) +1
INC Rn ; Rn← ( Rn) +1
INC direct ; direct← ( direct) +1
INC @Ri ; ( Ri) ← (( Ri) )+1
INC DPTR ; DPTR← ( DPTR) +1
加 1指令的操作 不影响程序状态字 PSW的状态 。
第三章 MCS-51 指令系统
1 61
例 3-10:设 ( R0) = 7EH,
片内数据 RAM中 ( 7EH) = 0FFH,
( 7FH) = 50H,
则分析执行下列指令后的结果 。
INC @R0 ; 7EH← 00H
INC R0 ; R0← 7FH
INC @R0 ; 7FH← 51H
第三章 MCS-51 指令系统
1 62
5,减 1指令组 ( 4条 )
DEC A ; A← ( A) - 1
DEC Rn ; Rn← ( Rn) - 1
DEC direct ; direct← ( direct) - 1
DEC @Ri ; ( Ri) ← (( Ri) )- 1
减 1操作不影响程序状态字 PSW的状态 。
MCS- 51指令系统中,只有数据指针 DPTR加 1指令,而没有 DPTR减 1指令 。
第三章 MCS-51 指令系统
1 63
6,乘除指令组
( 1) 乘法指令
MUL AB ;结果高位在 B,低位在 A
功能,完成 A与 B中两个 8位 无符号数相乘,16位乘积的低位字节放在 A,高位字节放在 B中 。
乘法运算影响 PSW的状态 。
若 乘积 < 0FFH( 即 ( B) =0),则 OV= 0,否则 OV= 1。
该运算总使 CY= 0。
第三章 MCS-51 指令系统
1 64
例 3-10:
若 ( A) = 80H=128,( B) = 32H=50,执行指令:
MUL AB
结果为,( B) = 19H,
( A) = 00H,
表示 乘积 ( BA) = 1900H=6400。
同时,OV= 1,CY= 0。
第三章 MCS-51 指令系统
1 65
( 2) 除法指令
DIV AB ; A/B,结果商在 A,余数在 B
除法运算影响 PSW的状态 。
当除数为 0( B= 0) 时,OV= 1,表明除法无意义,无法进行;
其它情况下,OV= 0。
任何情况下,CY= 0。
例 3-11,设 ( A) = 0BFH,( B) = 32H,执行指令:
DIV AB
结果为,( A) = 03H,( B) = 29H,CY= 0,OV= 0。
第三章 MCS-51 指令系统
1 66
7,十进制调整指令:
DA A
例,设 ( A) = 0101,0110B,56的 BCD码,
( R3) = 0110 0111B,67的 BCD码,
CY= 1,执行指令:
ADDC A,R3
DA A
( A)+( R3)= 1011,1101B
加 6调整,1011,1101B+ 0110,0110B
= 1,0010,0011B = 123
第三章 MCS-51 指令系统
1 67
3.3.3 逻辑运算及移位类指令共 24条,
包括 逻辑运算,
与,或,异或,清零,求反指令;
运算特点,按位操作移位指令 等操作 。
第三章 MCS-51 指令系统
1 68
1,逻辑与运算指令组 ( 6条 )
与运算符号,∧ 。
ANL A,Rn ; A← ( A) ∧ ( Rn)
ANL A,direct ; A← ( A) ∧ ( direct)
ANL A,@Ri ; A← ( A) ∧ (( Ri) )
ANL A,#data ; A← ( A) ∧ data
ANL direct,A ; direct← ( direct) ∧ ( A)
ANL direct,#data ; direct← ( direct) ∧ data
应用:常用于屏蔽字节中的某些位 。
欲清除的位和,0”与,欲保留的位和,1”与 。
1111,1111 ∧ 0101,0101= 0101,0101
第三章 MCS-51 指令系统
1 69
2,逻辑或运算指令组 ( 6条 )
ORL A,Rn ; A← ( A) ∨ ( Rn)
ORL A,direct ; A← ( A) ∨ ( direct)
ORL A,@Ri ; A← ( A) ∨ (( Ri) )
ORL A,#data ; A← ( A) ∨ data
ORL direct,A ; direct← ( direct) ∨ (A)
ORL direct,#data ; direct← ( direct) ∨ data
用途:用于使字节中的某些位置,1”。
欲不变的位,用,0”去,或,,
欲置 1 的位,用,1”去,或,。
第三章 MCS-51 指令系统
1 70
例 3-13:将累加器 A的低 4位传送到 P1口的低 4位,但
P1口的高 4位需保持不变 。 程序段如下:
MOV R0,A
ANL A,# 0FH
ANL P1,#0F0H
ORL P1,A
MOV A,R0
第三章 MCS-51 指令系统
1 71
3,逻辑异或运算指令组 ( 6条 )
运算符号,⊕,运算规则:
0⊕ 0= 0,1⊕ 1= 0,0⊕ 1= 1,1⊕ 0= 1
XRL A,Rn ; A← ( A) ⊕ ( Rn)
XRL A,direct ; A← ( A) ⊕ ( direct)
XRL A,@Ri ; A← ( A) ⊕ (( Ri))
XRL A,#data ; A← ( A) ⊕ data
XRL direct,A ; direct← ( direct) ⊕ ( A)
XRL direct,#data ; direct← ( direct) ⊕ data
第三章 MCS-51 指令系统
1 72
用途,用于对字节中某些位取反。
欲 取反位用,1”去,异或,,欲保留位用,0”去,异或
” 。
例如,将 5CH 的高位取反,低位保留。
0 1 0 1,1 1 0 1 B
⊕ 1 1 1 1,0 0 0 0 B
1 0 1 0,1 1 0 1 B
第三章 MCS-51 指令系统
1 73
4,累加器清 0取反指令组累加器清 0指令:
CLR A ; A← 0
累加器按位取反指令:
CPL A ; A← ( A )
第三章 MCS-51 指令系统
1 74
例:对某一双字节数求补码 。 若高 8位存于 R1,低 8位存于
R0,补码的结果是高 8位仍存于 R1,低 8位存于 R0。
MOV A,R0 ;低 8位数送 A
CPL A ;取反
ADD A,#01H ;加 1得低 8位数补码
MOV R0,A ;低 8位补码存于 R0
MOV A,R1 ;高 8位数送 A
CPL A ;取反
ADDC A,#00H ;加低 8位进位
MOV R1,A ;高 8位补码存于 R1
第三章 MCS-51 指令系统
1 75
5,移位指令组 ( 4条 )
( 1) 累加器 A循环左移指令
RL A
( 2) 累加器 A循环右移指令
RR A
A7←A 0 A7→A 0
第三章 MCS-51 指令系统
1 76
( 3)累加器 A带进位循环左移指令
RLC A
( 4)累加器 A带进位循环右移指令
RRC A
A7←A 0CY
A7←A 0CY
第三章 MCS-51 指令系统
1 77
例 3-15:写出每条指令执行后累加器的内容 。
MOV A,#01H ; ( A) = 01H
RL A ; ( A) = 02H
RL A ; ( A) = 04H
RL A ; ( A) = 08H
RL A ; ( A) = 10H
RR A ; ( A) = 08H
RR A ; ( A) = 04H
RR A ; ( A) = 02H
RR A ; ( A) = 01H
结论:左移一位相当于乘 2,右移一位相当于除以 2。
第三章 MCS-51 指令系统
1 78
3.3.4 控制转移类指令无条件转移指令,
条件转移指令,
调用和返回指令空操作指令等 。
该类指令多数不影响程序状态标志寄存器 。
第三章 MCS-51 指令系统
1 79
1,无条件转移指令组
( 1) 长转移指令
LJMP addr16;跳转范围 64KB,PC← addr16,三字节指令
( 2) 绝对转移指令
AJMP addr11;跳转范围 2KB,PC ← ( PC) + 2
PC10~0← addr11
假设,2070H AJMP 16AH
( PC) + 2= 0010,1000,0111,0010B( 2872H),
16AH = 001,0110,1010B
所以:目的地址= 2072H+ 16AH
= 0010,0001,0110,1010B( 216AH) 。
第三章 MCS-51 指令系统
1 80
( 3) 短转移指令:
SJMP rel;目的地址=( PC) +2+rel
例如,HERE,SJMP HERE ;等待指令或 HERE,SJMP $ ; $表示 PC的当前值
( 4)间接转移指令
JMP @A+DPTR ; PC← ( A) +( DPTR)
该指令可代替众多的判别跳转指令,具有 散转功能(又称散转指令) 。键盘译码程序就是本指令的一个典型应用。
第三章 MCS-51 指令系统
1 81
键功能 键 值 处理程序正转反转快速慢速
01
02
03
04
ZZ
FZ
KS
MS
例 3-16:由键盘上有四个操作键来控制电机的运转,功能说明如右表:
第三章 MCS-51 指令系统
1 82
……
MOV DPTR,#2000H
CLR C
RLC A ;完成乘 2操作
JMP @A+DPTR ;转操作键处理程序
2000H
2001H
2002H AJMP ZZ ;转正传程序
2003H
2004H AJMP FZ ;转反转程序
2005H
2006H AJMP KS ;转快速程序
2007H
2008H AJMP MS ;转慢速程序
……
第三章 MCS-51 指令系统
1 83
2,条件转移指令组
( 1) 累加器判零转移指令
JZ rel;若 ( A) =0,则 PC← ( PC) + 2+ rel
若 ( A) ≠0,则 PC← ( PC) + 2
JNZ rel;若 ( A) ≠0,则 PC← ( PC) + 2+ rel
若 ( A) =0,则 PC← ( PC) + 2
第三章 MCS-51 指令系统
1 84
例 3-17,将外部数据存储器 RAM从 1000H开始的连续单元的数据,传送到内部 RAM从 40H开始的连续单元,所传送的数据为零时,传送停止 。 参考程序如下:
MOV DPTR,#1000H
MOV R0,#40H
LOOP,MOVX A,@DPTR
JZ NEXT
MOV @R0,A
INC DPTR
INC R0
SJMP LOOP
NEXT,END
第三章 MCS-51 指令系统
1 85
( 2) 数值比较转移指令,三字节指令
CJNE A,# data,rel
CJNE A,direct,rel
CJNE Rn,# data,rel
CJNE @ Ri,# data,rel
若 左操作数=右操作数,则:
程序顺序执行 PC← ( PC) + 3
进位标志位清 0 CY= 0
若 左操作数>右操作数,则,程序转移
PC← ( PC) + 3+ rel
CY= 0
若 左操作数<右操作数,则:
程序转移 PC← ( PC) + 3+ rel
CY= l
第三章 MCS-51 指令系统
1 86
在 MCS-51中没有专门的数值比较指令,两个数的数值比较可利用这四条指令执行后 CY的状态来判断数值大小 。
若 ( CY) = 0,则左操作数>右操作数若 ( CY) = 1,则左操作数<右操作数第三章 MCS-51 指令系统
1 87
例 3-18:某温室内的温度要求控制在 15~ 30℃ 之间,采集的温度值 T放在累加器 A中 。 若采集到的温度 T> 30℃,程序转向 JW( 降温处理程序 ) ;若 T< 15,则程序转向 SW( 升温处理程序 ) ;若 30℃ ≥T≥15℃,则程序转向 FH( 返回主程序 ) 。
第三章 MCS-51 指令系统
1 88
程序段:
CJNE A,#30,LOOP1
AJMP FH
LOOP1,JNC JW
CJNE A,#15,LOOP2
AJMP FH
LOOP2,JC SW
JW,____
SW,___
FH,RET
第三章 MCS-51 指令系统
1 89
( 3) 循环转移指令 ( 或称为减 1非零转移指令 )
DJNZ Rn,rel ;两字节指令; Rn← ( Rn) - 1;若 (Rn)≠0,则 PC←( PC)+2+rel;若 ( Rn) =0,则 PC← ( PC) +2
DJNZ direct,rel ;三字节指令第三章 MCS-51 指令系统
1 90
例 3-16:把 5000H~ 501FH开始的外部 RAM单元清零 。 其程序段如下:
START1,MOV R0,#20H ;循环次数
MOV DPTR,#5000H ;
MOV A,#00H ; ( A) = 0
LOOP1,MOVX @DPTR,A ; ( DPTR) = 0
INC DPTR ;外部 RAM单元加 1
DJNZ R0,LOOP1 ;减 1非 0则转移

第三章 MCS-51 指令系统
1 91
3,子程序调用与返回指令组
( 1) 子程序的概念调用子程序的程序称之为主程序 。
主程序和子程序之间的调用关系可如图 3-8所示 。
第三章 MCS-51 指令系统
1 92
返回 2
返回 1
第 2次调用第 1次调用子程序
DELAY
主程序
A
B
C
D
断点断点主程序调用子程序与从子程序返回示意第三章 MCS-51 指令系统
1 93
MCS- 5l共有两条子程序调用指令和返回指令 。
( 2) 长调用指令
LCALL addr16; PC← ( PC) +3; SP← ( SP) +1,( SP) ← ( PC) 7~ 0; SP← ( SP) +1,( SP) ← ( PC) 15~ 8; PC← addr16
长调用指令的子程序调用范围是 64KB。
第三章 MCS-51 指令系统
1 94
( 3) 绝对调用指令
ACALL addr11; PC← ( PC) +2; SP← ( SP) +1,( SP) ← ( PC) 7~ 0; SP← ( SP) +1,( SP) ← ( PC) 15~ 8; PC← addr11
第三章 MCS-51 指令系统
1 95
( 4) 返回指令
RET ;子程序返回指令
RETI ;中断服务子程序返回指令:
4,空操作指令
NOP ; PC← ( PC) + 1
第三章 MCS-51 指令系统
1 96
3,3,5 位操作类指令位地址的表示方法主要有下列四种:以 AC为例
直接位地址表示,D6H( PSW的位 6)
点操作符表示,PSW.6
D0H.6
位名称表示,AC
第三章 MCS-51 指令系统
1 97
1位传送指令( 2条)
MOV C,bit ; CY← ( bit)
MOV bit,C ; bit← ( CY)
两个寻址位间不能实现直接传送。
例:将内部 RAM中 20H单元的第 6位(位地址为 06H)的内容,传送到 P1.0中。参考程序如下:
MOV C,06H
MOV P1.0,C
第三章 MCS-51 指令系统
1 98
1,位置位清零指令(共 4条)
CLR bit ; bit←0
CLR CY ; CY←0
SETB bit ; bit←1
SETB CY ; CY←1
第三章 MCS-51 指令系统
1 99
3,位逻辑操作指令(共 6条)
逻辑与、或、非三种
ANL C,bit ; CY← ( CY) ∧ bit
ANL C,/ bit ; CY← ( CY) ∧
ORL C,bit ; CY← ( CY) ∨ bit
ORL C,/ bit ; CY← ( CY) ∨
CPL bit ; bit← ( )
CPL C ; CY← ( )
bit
bit
bit
CY
第三章 MCS-51 指令系统
1 100
例 3-19:完成 Z=X⊕ Y异或运算,其中 X,Y,Z表示位地址 。
分析:异或运算可表示为:
程序段如下:
MOV C,X ; CY← ( X)
ANL C,/Y ; CY← ( X) ∧ ( )
MOV Z,C ;暂存结果于 Z中
MOV C,Y ; CY← ( Y)
ANL C,/X ; CY← ( ) ∧ ( Y)
ORL C,Z ; CY← ( X) ( ) ∨ ( ) ( Y)
MOV Z,C ;保存异或结果于 Z中
YXYXZ
Y
X
Y X
第三章 MCS-51 指令系统
1 101
例 3-20:比较内部 RAM中 30H和 40H中两个无符号数的大小,大数存于 50H,小数存于 51H单元中 。 若两数相等,
则置位片内 RAM的位 127。
MOV A,30H
CJNE A,40H,Q1 ;两数不等则转 Q1
SETB 127 ;相等则置位 127
SJMP NEXT ;出口
Q1,JC Q2 ;大数在 40H单元,转 Q2
第三章 MCS-51 指令系统
1 102
MOV 50H,A ;大数在 30H单元
MOV 51H,40H ;小数存于 51H单元
SJMP NEXT ;出口
Q2,MOV 50H,40H ;大数在 40H单元
MOV 51H,A ;小数存于 51H单元
NEXT,RET ;统一出口第三章 MCS-51 指令系统
1 103
4,位条件转移指令
( 1) 以 CY内容为条件的转移指令 ( 2条 )
JC rel;若( CY) =1,则( PC) ← ( PC) +2+ rel,
否则( PC) ← ( PC) +2
JNC rel;若( CY) =0,则( PC) ← ( PC) +2+ rel,
否则( PC) ← ( PC) +2
该指令一般与比较条件转移指令 CJNE一起使用。
第三章 MCS-51 指令系统
1 104
( 2) 以位地址内容为条件的转移指令 ( 3字节指令 )
JB bit,rel;若 ( bit) =1,则 ( PC) ← ( PC) +3+ rel
否则,( PC) ← ( PC) +3
JNB bit,rel
JBC bit,rel;若 ( bit) =1,则 ( PC) ← ( PC) +3+ rel,
( bit) ← 0;
否则,( PC) ← ( PC) +3
第三章 MCS-51 指令系统
1 105
本 章 小 结指令格式寻址方式指令系统,数据传送算术运算逻辑运算与移位控制转移位操作第三章 MCS-51 指令系统
1 106
思考题与习题
1,MCS-51系列单片机指令系统中有哪些寻址方式?
相应的寻址空间在何处?请举例说明。
2,片内 RAM 20H~2FH中的 128个位地址与直接地址
00H~7FH形式完全相同,如何在指令中区分出位寻址操作和直接寻址操作?
3,什么是源操作数?什么是目的操作数?通常在指令中如何区分?
4,查表指令是在什么空间上的寻址操作?
第三章 MCS-51 指令系统
1 107
1.
5,专用寄存器 PSW起什么作用?它能反映哪些指令的运行状态?
6,查表指令中都采用了基址加变址的寻址方式,使用
DPTR或 PC作为基址寄存器,请问这两个基址寄存器中的基址代表什么地址?
7,可以通过哪些方法将片内 RAM 60H单元的内容传送到片内 70H单元?
第三章 MCS-51 指令系统
1 108
10.已知 ( A) =7AH,( R0) =30H,( 30H) =A5H,
( PSW) =80H,写出下列各条指令执行后 A和 PSW的内容 。
( 1) XCH A,R0; ( 2) XCH A,30H;
( 3) XCH A,@R0; ( 4) XCHD A,@R0;
( 5) SWAP A ( 6) ADD A,R0;
( 7) ADD A,30H; ( 8) ADD A,#30H;
( 9) ADDC A,30H; ( 10) SUBBA,#30H;
第三章 MCS-51 指令系统
1 109
11.试比较下列每组两条指令的区别。
(1) MOV A,#24H 与 MOV A,24H;
(2) MOV A,R0 与 MOV A,@R0;
(3) MOV A,@R0 与 MOV A,@DPTR;
(4) MOVX A,@R1 与 MOVX A,@DPTR;
第三章 MCS-51 指令系统
1 110
12.已知单片机使用 6MHZ晶体,试编写一个延时 1ms的子程序。
13.已知( A) =83H,( R0) =17H,( 17H) =34H,请写出下列程序段执行后 A中的内容。
ANL A,#17H
ORL 17H,A
XRL A,@R0
CPL A
第三章 MCS-51 指令系统
1 111
CPL C
SETB 01H
LOOP1,ORL C,ACC.0
JB ACC.2,LOOP2
CLR 00H
LOOP2,MOV P1,A
----------------------
16.编写程序完成将片外数据存储器地址为
1000H~1030H的数据块,全部传送到片内 RAM
30H~60H中,并将原数据块区域全部清零。