指令编码格式及分类
寻址方式
数据传送类指令
算术运算类指令
逻辑运算类指令
控制程序转移类指令
位操作类指令
学习指导和要求
理解和掌握指令的三种编码格式;
熟练掌握寻址方式;
熟记各种类型的指令格式及功能,并能编写简单程序。
§3-1 指令编码格式及分类
一、 指令编码格式
一条指令表示计算机所完成的某种操作。它通常由操作码和操作数两部分组成。例如:
MOV A,R1
本系统有下列三种指令编码格式:
单字节指令(49条)
格式1:
7 0
操作码
格式2:
7 0
操作码
双字节指令(46条)格式:
操作码
数据或地址
三字节指令(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指令系统共提供七种寻址方式:
立即寻址
该方式把操作数(即立即数)包含在指令字节中。在指令格式中,在立即数前冠以符号 "#"表示立即寻址方式。
例如:
MOV A,#40H ;A 40H
MOV DPTR,#1000H ; DPTR 1000H
存储格式为:
操作码
8位立即数
90H
10H
00H
操作码
高8位立即数
低8位立即数
直接寻址
该方式是把操作数的地址包含在指令字节中,而操作数本身则存放在该地址指示的数据存储单元中。在指令格式中,操作数的地址直接写在指令中。
例如:
MOV A,40H ;A (40H)
设:(40H)= 2BH
MOV A,40H 存储和执行示意图如图所示。
操作码
E5H A
直接地址
40H
40H
执行前,(40H)= 2BH
执行后,(40H)= 2BH,(A)= 2BH
寄存器寻址方式
该方式把操作数存放在指定的寄存器中。能实现这种寻址的寄存器有:R0~R7、A、B、DPTR。
例如:
MOV A,#30H ;A ←30H
立即寻址 寄存器寻址
MOV R0,R7 ;R0 (R7)
寄存器寻址寄存器寻址
寄存器间接寻址方式
该方式是把操作数的所在地址存放在指定的寄存器中。能实现这种寻址方式的寄存器有:R0、R1、DPTR。在指令格式中,在寄存器前面冠以符号"@"表示。
例如:
MOV A,@R0;A←((R0))
寄存器间接寻址
寄存器寻址
设:(R0)= 40H (40H)= 3FH
执行前:(R0)= 40H (40H)= 3FH
执行后:(R0)= 40H (40H)= 3FH (A)= 3FH
基址加变址寻址方式
该方式把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助记符。
相对寻址方式
这种寻址方式是以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel以形成目标地址。该寻址方式常用在条件转转指令中,相对偏移量rel给出相对于PC当前值的跳转范围,其值是一个带符号的8位二进制数,取值范为-128~127,以补码形式置于操作码之后存放。
位寻址方式
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)中的各标志位。
数据传送类指令分为以下几种:
内部数据传送指令
数据传送在单片机内部进行,不通过外部总线,传送速度快。指令格式如下:
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)
累加器与外部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的任意一个存储单元。
程序存储器数据传送指令
包括内部程序存储器和外部程序存储器。只能读数据传送是单方向的。格式如下:
MOVC A,@A+DPTR ;A ←((A)+(DPTR))
MOVC A,@A+PC ;A←((A)+(PC))
这两条指令同常用于查找程序中的数据表格。
堆栈操作指令
堆栈是建立在内部RAM中,通过堆栈指示器SP进行读写操作。指令格式为:
PUSH direct ;SP←(SP)+1, (SP)←(direct)
POP direct ;direct←((SP)), (SP)←(SP)-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中的标志位。
一、加法类运算指令
加法指令(影响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))
带进位位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指令
INC A ; A (A)+1(影响P)
INC Rn ; Rn (Rn)+1
INC direct ; direct (direct)+1
INC @Ri ; (Ri) ((Ri))+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指令
DEC A ; A (A) - 1(影响P)
DEC Rn ; Rn (Rn) - 1
DEC direct ; direct (direct) -1
DEC @Ri ;(Ri) ((Ri)) - 1
三、乘除指令
乘法指令
MUL AB ;B、A (A)×(B),影响OV、P
若(B)﹥ 0,则OV=1;否则OV=0。
除法指令
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 逻辑运算类指令
一.单操作数逻辑运算指令
累加器清零
CLR A ; A 0
累加器取反
CPL A ; A ( A )
累加器循环左移
RL A ;
累加器循环右移
RR A ;
累加器带进位CY循环左移
RLC A ;
CY A7 A0
An+1 An ,CY A7 , A0 CY
累加器带进位CY循环右移
RRC A ;
CY A7 A0
A0 CY, CY A7 , An+1 An
二.双操作数逻辑运算指令
逻辑与
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
逻辑或
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
逻辑异或
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) 长转移指令
格式:LJMP 标号;转移至标号处执行,转移范围为64KB。
(2) 短转移指令
格式:SJMP 标号;转移至标号处执行,转移范围为256B。
(3) 绝对转移指令
格式:AJMP 标号 ;转移范围为2KB
(4) 相对转移指令
格式: JMP 标号 ;转移目标地址为(A)+(DPTR) PC。
条件转移指令
(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,转至标号执行。
空操作指令
NOP ;PC (PC)+1,不作任何操作,只消耗一个机器周期的时间,常用于程序的等待和延时。
§3-7 位操作指令
位传送指令
MOV C,bit ; CY (bit)
MOV bit, C ; bit (CY)
位置位和清除指令
SETB C ;CY 1
CLR C ;CY 0
SETB bit ;bit 1
CLR bit ;bit 0
位运算指令
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 )
位控制转移指令
JC 标号 ;若(CY)=1,转至标号处执行
JNC 标号 ;若(CY)=0,转至标号处执行
JB bit,标号 ;若(bit)=1,转至标号处执行
JNB bit, 标号 ;若(bit)=0 , 转至标号处执行
JBC bit,标号 ;若(bit)=1,转至标号处执行,并且0 bit。
相关文章