第3章 MCS-51指令系统

  • 指令编码格式及分类
  • 寻址方式
  • 数据传送类指令
  • 算术运算类指令
  • 逻辑运算类指令
  • 控制程序转移类指令
  • 位操作类指令

学习指导和要求

  • 理解和掌握指令的三种编码格式;
  • 熟练掌握寻址方式;
  • 熟记各种类型的指令格式及功能,并能编写简单程序。

§3-1 指令编码格式及分类

一、 指令编码格式

一条指令表示计算机所完成的某种操作。它通常由操作码和操作数两部分组成。例如:

MOV A,R1

本系统有下列三种指令编码格式:

  1. 单字节指令(49条)

格式1:

7	0
操作码

格式2:

7	0
操作码
  1. 双字节指令(46条)格式:
操作码
数据或地址
  1. 三字节指令(16条)格式:
操作码
数据或地址
数据或地址

例如:

  • 一字节指令空操作NOP的编码格式为:
0	0	0	0	0	0	0	0
操作码

数据传送指令MOV A,R1的编码格式为:

1	1	1	0	1	0	0	1
操作码
  • 两字节指令MOV A,#40H的编码格式为:
0	1	1	1	0	1	0	0	操作码74H
0	1	0	0	0	0	0	0	立即数40H
  • 三字节指令MOV 20H,#3AH的编码格式为:
0	1	1	1	0	1	0	1	操作码75H
0	0	1	0	0	0	0	0	操作数的地址20H
0	0	1	1	1	0	1	0	立即数3AH

MOV DPTR,#1000H的编码格式为:

1	0	0	1	0	0	0	0	操作码90H
0	0	0	1	0	0	0	0	操作数高八位10H
0	0	0	0	0	0	0	0	操作数低八位00H

二、指令分类

按指令功能分为:

数据传送类指令(29条);算术运算类指令(24条);逻辑运算类指令(24条);控制转移类指令(17条);位操作指令(17条)。

在上述111条指令中,64条指令执行时间为一个机器周期,45条指令执行时间为两个机器周期,只有乘、除法指令执行时间为四个机器周期。当主频为12MHz时,典型指令执行时间为1us。

§3-2 寻址方式

寻址方式是指操作数存放存储单元地址的表示形式。

MCS-51指令系统共提供七种寻址方式:

  1. 立即寻址

该方式把操作数(即立即数)包含在指令字节中。在指令格式中,在立即数前冠以符号 "#"表示立即寻址方式。

例如:

MOV A,#40H	;A	40H
MOV DPTR,#1000H	; DPTR	1000H

存储格式为:

操作码
8位立即数

90H
10H
00H

操作码
高8位立即数
低8位立即数
  1. 直接寻址

该方式是把操作数的地址包含在指令字节中,而操作数本身则存放在该地址指示的数据存储单元中。在指令格式中,操作数的地址直接写在指令中。

例如:

MOV A,40H ;A	(40H)

设:(40H)= 2BH

MOV A,40H 存储和执行示意图如图所示。

操作码
E5H	A

直接地址
40H

40H

执行前,(40H)= 2BH
执行后,(40H)= 2BH,(A)= 2BH

  1. 寄存器寻址方式

该方式把操作数存放在指定的寄存器中。能实现这种寻址的寄存器有:R0~R7、A、B、DPTR。

例如:

MOV A,#30H	;A ←30H
立即寻址 寄存器寻址

MOV R0,R7	;R0 (R7)
寄存器寻址寄存器寻址
  1. 寄存器间接寻址方式

该方式是把操作数的所在地址存放在指定的寄存器中。能实现这种寻址方式的寄存器有:R0、R1、DPTR。在指令格式中,在寄存器前面冠以符号"@"表示。

例如:

MOV A,@R0;A←((R0))
寄存器间接寻址
寄存器寻址

设:(R0)= 40H (40H)= 3FH
执行前:(R0)= 40H (40H)= 3FH
执行后:(R0)= 40H (40H)= 3FH (A)= 3FH

  1. 基址加变址寻址方式

该方式把DPTR或PC寄存器作为基址寄存器,累加器A作为变址寄存器,(A)+(PC)或(A)+(DPTR)的和作为操作数的16位地址。这种寻址方式的指令只有三条:

MOVC A,@A+DPTR	; A←((A)+(DPTR))
MOVC A, @A+PC	; A←((A)+(PC))
JMP @A+DPTR	;跳转至(A)+(DPTR)

前两条是程序存储器读指令,用MOCV助记符。

  1. 相对寻址方式

这种寻址方式是以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel以形成目标地址。该寻址方式常用在条件转转指令中,相对偏移量rel给出相对于PC当前值的跳转范围,其值是一个带符号的8位二进制数,取值范为-128~127,以补码形式置于操作码之后存放。

  1. 位寻址方式

MCS-51具有位处理功能,可以对二进制"位"进行操作。

(1) 位寻址的寻址范围

  • 内部RAM中的20H-2FH字节地址范围,共128位,位地址为00H-7FH。
  • 特殊功能寄存器的可寻址位。可位寻址的特殊功能寄存器有B、ACC、PSW、IP、IE SCON、TCON、P0~P3,共81个。
  • PSW中的CY作为位累加器。

(2) 位寻址方式

位寻址方式使用直接寻址方式,有下列四种表示形式:

  • 直接地址方式:在指令中直接给出位地址。
  • 点操作符方式:在字节地址或寄存器名与位序号之间加一个点。
  • 位名称方式:直接给出寄存器的位名称。

例如状态寄存器PSW的格式如下:

D7 D6 D5 D4	D3	D2	D1 D0	位地址
CY AC F0 RS1 RS0 OV	/	P	D0H
	 位累加器

若将OV的内容传送到位累加器CY,可用下列指令完成。

MOV C ,0D2H	MOV C,PSW.2
位地址	 点方式

MOV C,0D0H.2	MOV C,OV
点方式		位名称

寻址方式与寻址存储空间:

寻址方式    符号表示    寻址存储空间
立  即      #data      程序存储器
直  接      direct     程序存储器和SFR
寄存器      寄存器名    R0~R7、A、B、DPTR
寄存器      @R0,@R1    内部RAM 00H~7FH
间  接      @DPTR      外部RAM 64KB
基址加      @A+PC      程序存储器
变  址      @A+DPTR
相对寻址    rel        程序存储器

指令表中符号意义的说明:

Rn:	n=0~7,即R0~R7
Ri:	i=0、1,即R0、R1
direct:	表示直接寻址方式
#data:	8位立即数
#data16:	16位立即数
addr16:	16位地址
addr11:	11位地址
rel:	相对偏移量
bit:	直接寻址位

§3-3 数据传送类指令

格式:MOV 目标,源;目标 源

特点:

(1) 指令中有数据源地址和传送数据目标地址, 传送方向由源地址中的数据传送到目的地址中,源地址中的内容不变。

(2) 数据传送类指令的执行结果不影响程序状态寄存器(PSW)中的各标志位。

数据传送类指令分为以下几种:

  1. 内部数据传送指令

数据传送在单片机内部进行,不通过外部总线,传送速度快。指令格式如下:

MOV A,#data			;A ←data
MOV Rn,#data			;Rn ←data
MOV direct,#data	;direct ← data
MOV @Ri,#data		;(Ri) ← data
MOV DPTR ,#data16 ;DPTR ← data16
MOV A , Rn	;A ←(Rn)
MOV Rn , A	;Rn ←A
MOV A , direct	;A←(direct)
MOV direct, A	;direct ← (A)
MOV A ,@Ri	; A←((Ri))
MOV @Ri , A	;(Ri)←(A)
MOV Rn, direct		;Rn←(direct)
MOV direct , Rn		;direct←(Rn)
MOV @Ri ,direct	;(Ri)←(direct)
MOV direct, @Ri	;direct←((Ri))
MOV direct2,direct1	;direct2←(direct1)
  1. 累加器与外部RAM之间的数据传送指令

(1)由Ri提供外部RAM的单元地址。格式:

MOVX	A,@Ri	;A←((Ri)),i=0,1
MOVX	@Ri, A	;(Ri) ←(A),i=0,1

只能访问外部RAM 00H-FFH256个存储单元。

(2)由DPTR提供外部RAM单元地址。格式:

MOVX	A,@DPTR	;A←((DPTR))
MOVX	@DPTR, A	;(DPTR) ←(A)

可以访问外部RAM的任意一个存储单元。

  1. 程序存储器数据传送指令

包括内部程序存储器和外部程序存储器。只能读数据传送是单方向的。格式如下:

MOVC	A,@A+DPTR	;A ←((A)+(DPTR))
MOVC	A,@A+PC	;A←((A)+(PC))

这两条指令同常用于查找程序中的数据表格。

  1. 堆栈操作指令

堆栈是建立在内部RAM中,通过堆栈指示器SP进行读写操作。指令格式为:

PUSH direct	;SP←(SP)+1, (SP)←(direct)
POP direct	;direct←((SP)), (SP)←(SP)-1
  1. 数据交换指令

(1) 字节交换指令格式为:

XCH A, Rn	;(A)←→(Rn),n=0~7
XCH A, direct	;(A)←→(direct)
XCH A, @Ri		;(A)←→((Ri)),i=0,1

(2) 半字节交换指令格式为:

XCHD A,@Ri		;(A3~0)←→((Ri)3~0)
SWAP A	;(A3~0)←→(A7~4)

这两条指令通常用于十六进制数或BCD码的数位交换。

§3-4 算术运算类指令

该类指令有加、减、乘、除四种,其特点是运算结果影响程序状态寄存器PSW中的标志位。

一、加法类运算指令

  1. 加法指令(影响CY、OV、AC、P)
ADD	A, #data	; A	(A)+data
ADD	A,Rn		; A	(A)+(Rn)
ADD	A,direct	; A	(A)+(direct)
ADD	A,@Ri		; A	(A)+((Ri))
  1. 带进位位CY的加法(影响CY、OV、AC、P)
ADDC	A,#data	; A	(A)+data+CY
ADDC	A,Rn	;  ; A	 (A)+(Rn)+CY
ADDC	A,direct	; A	(A)+(direct)+CY
ADDC	A,@Ri	; A	(A)+((Ri))+CY
  1. 加1指令
INC	A	; A	(A)+1(影响P)
INC	Rn	; Rn	(Rn)+1
INC	direct	; direct	(direct)+1
INC	@Ri	; (Ri)	((Ri))+1

二.减法运算指令

  1. 带借位位CY的减法(影响CY、OV、AC、P)
SUBB A,#data	; A	(A) - data - CY
SUBB A,Rn	; A	(A) - (Rn) - CY
SUBB A,direct	; A	(A) - (direct) - CY
SUBB A,@Ri	; A	(A) - ((Ri)) - CY
  1. 减1指令
DEC	A	; A	(A) - 1(影响P)
DEC	Rn	; Rn	(Rn) - 1
DEC	direct	; direct	(direct) -1
DEC	@Ri	;(Ri)	((Ri)) - 1

三、乘除指令

  1. 乘法指令
MUL AB ;B、A	(A)×(B),影响OV、P

若(B)﹥ 0,则OV=1;否则OV=0。

  1. 除法指令
DIV AB  ;A、B	(A)/(B),影响OV、P

A中存放被除数,B中存放除数,执行之后A中存放商,B中存放余数。若除数为0,则OV=1,表示除法无意义。

四、十进制调整指令

十进制调整指令用于对BCD码十进制数加法运算的结果进行调整。

格式: DA A

调整方法为:

  • A中低四位大于9或标志位AC=1,则低四位加6调整,即A (A)+06H。
  • A中高四位大于9或标志位CY=1,则高四位加6调整,即A (A)+60H。

§3-5 逻辑运算类指令

一.单操作数逻辑运算指令

  1. 累加器清零
CLR A	; A	0
  1. 累加器取反
CPL A	; A	( A )
  1. 累加器循环左移
RL A	;
  1. 累加器循环右移
RR A	;
  1. 累加器带进位CY循环左移
RLC A ;

CY	A7	A0
An+1	An	,CY	A7 , A0	CY
  1. 累加器带进位CY循环右移
RRC A ;

CY	A7	A0
A0	CY, CY	A7 , An+1	An

二.双操作数逻辑运算指令

  1. 逻辑与
ANL A,#data	; A	(A)^data
ANL A,Rn	; A	(A)^(Rn), n=0-7
ANL A,direct	; A	(A)^(direct)
ANL A,@Ri	; A	(A)^((Ri)), i=0,1
ANL direct,A	; direct	(direct)^(A)
ANL direct,#data	; direct	(direct)^data
  1. 逻辑或
ORL A,#data	; A	(A)Vdata
ORL A,Rn	; A	(A)V(Rn), n=0-7
ORL A,direct	; A	(A)V(direct)
ORL A,@Ri	; A	(A)V((Ri)), i=0,1
ORL direct,A	; direct	(direct)V(A)
ORL direct,#data ; direct	(direct)Vdata
  1. 逻辑异或
XRL A,#data	; A	(A)data
XRL A,Rn	; A	(A)(Rn),n=0-7
XRL A, direct	; A	( A)( direct)
XRL A,@Ri	; A	(A)((Ri)),i=0,1
XRL direct,A	; direct	(direct)(A)
XRL direct,#data	; direct	(direct)data

§3-6 控制转移类指令

共分三种:无条件转移、条件转移和循环转移。

  1. 无条件转移

(1) 长转移指令

格式:LJMP 标号;转移至标号处执行,转移范围为64KB。

(2) 短转移指令

格式:SJMP 标号;转移至标号处执行,转移范围为256B。

(3) 绝对转移指令

格式:AJMP 标号 ;转移范围为2KB

(4) 相对转移指令

格式: JMP 标号 ;转移目标地址为(A)+(DPTR) PC。

  1. 条件转移指令

(1) 累加器判零转移指令

JZ	标号;若(A)=0,转至标号执行。
JNZ	标号;若(A) 0,转至标号执行。

(2) 比较转移指令

CJNE	A,#data,标号;(A)  data,转至标号执行
CJNE	A,direct,标号;(A)  (direct),转至标号执行
CJNE	Rn,#data,标号;(Rn)  data,转至标号执行
CJNE @Ri,#data,标号;((Ri))  data,转至标号执行

(3) 减'1'不为零转移指令

DJNZ Rn,标号;Rn	(Rn) -1 , 若(Rn) 0,转至标号执行。
DJNZ direct,标号;direct	(direct)-1,若(direct) 0,转至标号执行。
  1. 空操作指令
NOP	;PC	(PC)+1,不作任何操作,只消耗一个机器周期的时间,常用于程序的等待和延时。

§3-7 位操作指令

  1. 位传送指令
MOV	C,bit	; CY	(bit)
MOV	bit,	C	; bit	(CY)
  1. 位置位和清除指令
SETB C	;CY	1
CLR C	;CY	0
SETB bit	;bit	1
CLR bit	;bit	0
  1. 位运算指令
ANL C,bit	;CY (CY)( bit)
ANL C,/bit	;CY (CY)( bit)
ORL C,bit	;CY (CY)V( bit)
ORL C,/bit	;CY (CY)V( bit)
CPL C	;CY  (CY)
CPL  bit	; bit   ( bit )
  1. 位控制转移指令
JC	标号	;若(CY)=1,转至标号处执行
JNC	标号	;若(CY)=0,转至标号处执行
JB	bit,标号	;若(bit)=1,转至标号处执行
JNB	bit, 标号	;若(bit)=0 , 转至标号处执行
JBC	bit,标号	;若(bit)=1,转至标号处执行,并且0	bit。