从头开始学51单片机之3:指令系统

发布于:2022-12-10 ⋅ 阅读:(401) ⋅ 点赞:(0)

目录

一、概念

二、指令格式

三、寻址方式

1. 立即寻址

2. 直接寻址

3. 寄存器寻址

4. 寄存器间接寻址

5. 变址寻址

6. 相对寻址

7. 位寻址

四、指令分类

五、指令功能


一、概念

  • 指令:计算机能够识别和执行,用于控制各功能部件完成某一特定动作的命令
  • 指令系统:所有指令的集合构成该类计算机的指令系统
  • 助记符:便于人们记忆、并能描述指令功能和指令运算元的符号

二、指令格式

  • 格式:

                [标号: ]    操作码    [目的操作数,]    [源操作数]    [; 注释]

  • 标号和注释可以没有
  • 根据指令,操作数为0、1、2或3
  • 注释内容不参与程序的汇编
  • 指令中常用缩写符号及意义

1

#data

8位立即数

2

#data16

16位立即数

3

Rn

工作寄存器,R0~R7,n=0~7

4

Ri

工作寄存器,i=0或1,可作为间接寻址寄存器的2个寄存器

5

@

间接地址符号,@Ri指寄存器Ri间接寻址

6

direct

8位直接地址,可以是特殊功能寄存器SFR的地址或内部数据存储器单元地址

7

addr11

11位目的地址,用于AJMP和ACALL指令,均在2KB地址范围内转移或调用

8

addr16

16位目的地址,用于LJMP和LCALL指令,可在64KB地址范围内转移或调用

9

rel

有符号的8位偏移地址,主要用于所有的条件转移指令和SJMP指令,其范围是相对于下一条指令的第一字节地址,再偏移-128~+127字节

10

bit

位地址,片内RAM中的可寻址位和专用寄存器中的可寻址位

11

/

位操作的前缀,表示对该位操作数取反,如:/bit

12

$

当前指令存放的地址

13

(X)

表示由X所指定的某寄存器或某单元中的内容

14

((X))

表示由X间接寻址单元中的内容

15

B

通用寄存器,常用于乘法MUL和除法DIV的指令

16

C

进位标志位或者布尔处理器中的累加器(功能复用,看是否做加减运算)

17

<-

表示指令的操作结果是将箭头右边的内容传送到左边

三、寻址方式

  • 寻址方式:在指令中说明操作数所在地址的方法。一条指令的运行,需要寻址操作数或者从操作数所在地址寻找到本指令有关的操作数,即寻址方式。

序号

寻址方式

寻址空间范围

1

寄存器寻址

R0~R7,A,B,Cy,DPTR寄存器

2

立即寻址

程序存储器

3

寄存器间址

内部RAM的00H~FFH,外部RAM

4

直接寻址

内部RAM的00H~7FH,SFR

5

变址寻址

程序存储器

6

相对寻址

程序存储器

7

位寻址

内部RAM的20H~2FH的128位,SFR中的93位

1. 立即寻址

  • 指令直接给出操作数,立即操作数用前面有#的8位或16位数表示
  • 立即数只能用作源操作数
  • 主要用于对特殊功能寄存器SFR和指定的存储单元赋初值
    MOV    A, #60H                 ; (A) <- 60H
	MOV    DPTR, #3400H            ; (DPTR) <- 3400H
	MOV    30H, #40H               ; (30H) <- 40H

 2. 直接寻址

  • 指令中直接给出操作数所在的存储单元的地址号,该地址为操作数所在的字节地址或位地址
  • 可以直接使用由符号名称所表示的地址,即符号地址
  • 可访问3种地址空间:
    • 特殊功能寄存器:直接寻址是唯一的访问方式
    • 内部RAM低128B(00H~7FH)
    • 221个位地址空间
	MOV    A, 40H                  ; (A) <- (40H)

3. 寄存器寻址

  • 操作数存放于寄存器(Rn、ACC、B、DPTR、Cy)中
	MOV    A, R7                   ; (A) <- (R7)

4. 寄存器间接寻址

  • 由指令指出某个寄存器的内容作为操作数地址
  • 使用所选定寄存器中的R0和R1作为地址指针(堆栈操作时,使用堆栈指针SP),寻址片内RAM中的256个单元
  • 也可访问外部RAM
	MOV    A, R0                   ; (A) <- (R0)
	MOV    A, @R0                  ; (A) <- ((R0))
  • R0~R7中,只有R0和R1可以作为间接寻址寄存器使用,R2~R7只能作为普通的R寄存器使用

5. 变址寻址

  • 基址寄存器(DPTR和PC)与变址寄存器(A)的内容相加,作为操作数的地址,实现对程序存储器的访问
  • 由于程序存储器是只读的,变址寄存器只有读操作而无写操作,指令助记符采用MOVC
  • 51系列单片机的变址寻址指令只有3条:
	MOVC    A, @A+DPTR            ; (A) <- ((A)+(DPTR)), 更常用
	MOVC    A, @A+PC              ; (A) <- ((A)+(PC))
	JMP     @A+DPTR               ; (PC) <- ((A)+(DPTR))

6. 相对寻址

  • 以当前程序计数器PC的内容为基础,加上指令给出的1个字节补码(偏移量)形成新的PC值

7. 位寻址

  • 51系列单片机具有位寻址功能,即指令中直接给出位地址,可以对内部RAM中的位寻址区的128位和部分特殊寄存器SFR中的相关位进行寻址,并且位操作指令可对可寻址的每一位进行传送及逻辑操作
  • 位寻址只能对有位地址的单元作位寻址操作
  • 位寻址其实是一种直接寻址方式,不过其地址是位地址,只能用在位操作指令中
	SETB    PSW.3        ; (PSW.3) <- 1

四、指令分类

  • 51系列单片机的指令系统共有111条指令
  • 按照指令功能分类:
    • 数据传送类指令(29条)
    • 算术传送类指令(24条)
    • 逻辑运算类指令(24条)
    • 位操作类指令(17条)
    • 控制转移类指令(17条)
  • 按照指令执行所需要的时间分类:——机器周期
    • 单周期指令(64条)
    • 双周期指令(45条)
    • 四周期指令(2条):乘、除两条指令
  • 按照指令所占的字节数分类:
    • 单字节指令(49条)
    • 双字节指令(46条)
    • 三字节指令(16条)

五、指令功能