首页 理论教育零基础学习MCS51单片机指令系统

零基础学习MCS51单片机指令系统

【摘要】:例如,MCS51系列单片机指令集中,一条指令用二进制表示为0111 1000 0110 1110B。例如4.指令类型MCS51系列单片机指令集共有111条指令,其中数据传送类指令29条,算术运算类指令24条,逻辑运算类指令24条控制转移类指令17条布尔位运算类指令17条。

单片机指令系统是芯片生产厂商定义并为用户提供的软件资源。不同的生产厂商生产的单片机芯片型号系列不同所定义的单片机指令系统也不同。自然按照不同指令系统编写的汇编程序也不能相互移植。

1.指令系统的助记符表示法

单片机从存储器内读出的指令实际上是一系列二进制编码,一条指令由操作码和操作数组成。例如,MCS51系列单片机指令集中,一条指令用二进制表示为0111 1000 0110 1110B(其中的“B”代表是二进制数)。若用十六进制表示为78 6EH(其中的H代表是十六进制数)。这种指令表示法单片机能顺利地识别它。但为人阅读带来了一定的困难,若想准确地识别100多条各种不同的十六进制代码也是不现实的。若用有一定意义的英语字符表示就会方便多了。上面的指令可以表示为“MOV A,#6EH”。这里“MOV”是MOVE的缩写,意思是传送,“A”代表累加器,“#6EH”代表一个十六进制的立即数。整个指令的意思就是将立即数“6EH”传送到累加器“A”中,只要记住“MOV”的意思就很容易阅读。“MOV”就是助记符。将指令机器码变化为用助记符表示是很大的进步。

2.MCS51系列单片机助记符指令简介

在MCS51系列单片机助记符指令中定义并使用了一些符号,如一条数据传送指令“MOV A,#23H”,其意义是将十六进制立即数“23H”传送到累加器“A”中。在这一条指令不仅要将指令进行通用意义的表示,还要用符号“DATA”表示“23H”代表的是数据。这条指令就可以写为“MOV A,#DATA”。这就可以准确地涵盖所有的数据。下面列出说明指令中定义的各种符号及意义:

1)Rn表示当前选中的工作寄存器R0~R7(n=0~7)。

2)Ri表示可用间接寻址的寄存器R0~R1(i=0,1)。

3)DIRECT表示片内RAM单元8位地址。它可以是RAM单元地址,也可以是I/O接口的地址。

4)#DATA表示包含在指令中的8位立即数。

5)#DATA16表示包含在指令中的16位立即数。

6)ADDR16表示16位目的地址,用于LCALL和LJMP指令中,范围是64KB程序存储器地址空间。

7)ADDR11表示11位目的地址,用于ACALL和AJMP指令中。

8)REL表示8位带符号的偏移字节。它用于短转移和所有条件转移指令的相对地址。由相对于表示下一条指令的第一个字节地址计算,在-128~+127范围内取值。

9)DPTR表示数据指针,可用作16位地址寄存器。

10)BIT表示内部RAM或SFR中的直接地址位。

11)A表示累加器。

12)B表示B寄存器。用于MUL和DIV指令。

13)C表示进位标志位,或作为布尔处理机中的累加器。

14)@表示间址寄存器或基址寄存器的前缀,如@Ri,@A,@DPTR。

15)/表示位操作数的前缀,表示对该位操作数取反,如/BIT。

16)(X)表示X中的内容。

17)((X))表示X间址的内容。

3.指令格式

一般一条指令包括:<操作码><空格><操作数1><逗号><操作数2><逗号><操作数3>,在这里操作码是指令助记符,助记符规定了指令的操作内容。在空格后面是操作数,它提供操作所必需的数据或地址。操作数可以是1个、2个,最多3个,中间用逗号隔开。也可以没有操作数,而只有指令助记符。例如

978-7-111-47138-7-Chapter03-184.jpg

4.指令类型

MCS51系列单片机指令集共有111条指令,其中数据传送类指令29条,算术运算类指令24条,逻辑运算类指令24条控制转移类指令17条布尔位运算类指令17条。共有44种不同操作类型,255个指令机器码。这44种操作类型按首字母排列其含义见表3-6。

表3-6 操作类型及其含义

978-7-111-47138-7-Chapter03-185.jpg

(续)

978-7-111-47138-7-Chapter03-186.jpg

MCS51系列单片机的指令集见表3-7。

表3-7 MCS51系列单片机的指令集

978-7-111-47138-7-Chapter03-187.jpg

(续)

978-7-111-47138-7-Chapter03-188.jpg

(续)

978-7-111-47138-7-Chapter03-189.jpg(www.chuimin.cn)

(续)

978-7-111-47138-7-Chapter03-190.jpg

在上面的指令表中,指令的操作用符号化表示。例如,MOVA,#DATA执行的操作就是A←DATA,箭头代表数据DATA的传送方向。右边是源操作数,左边是目的操作数,这样整个指令的表示就非常形象一看就知道是将立即数DATA传送到累加器A。

5.MCS51系列单片机汇编语言中常用的伪指令

伪指令是程序编制者对汇编程序发出的命令。它用于标明源程序中的起始地址位置、预定义的寄存器名称、预定义的标号地址、结束汇编的位置等。这些信息是对源程序进行汇编所必需的,在源程序通过汇编后生成的机器代码文件中,这些伪指令已没有意义了。因此,也就没有伪指令相应的机器代码,即它不是直接参加程序执行的指令。

MCS51系列单片机汇编语言中常用的伪指令如下:

(1)ORG(ORIGIN)指明起始地址

用于指明源程序的起始地址及中间必须重新开始的地址。

格式:ORG<地址>

其中,地址为16位程序存储器的实际地址。在源程序起始处要设一条ORG指令。

例如 ORG 0000H

LJMPMAIN

单片机上电复位后,自动从地址0000H处执行程序,因而必须在0000H地址处设一条长转移指令,转移到实际的主程序的起始地址MAIN。

978-7-111-47138-7-Chapter03-191.jpg

用ORG指令标明新的起始地址07FFH。

(2)END指明汇编的结束

格式

END

用于源程序的结尾,位于源程序的最后。它指示源程序到此结束后面的任何部分不予处理。

(3)EQU(EQUATE)赋值

用于给标号赋值。

格式 <字符名称><空格>EQU<空格><赋值项>

例如LED_1 EQU 0100H

(4)DB(Define Byte)定义字节

用于对程序存储器的地址定义字节内容,每行最多定义8个数据字节,中间以逗号隔开,末尾不加逗号。

格式: <DB><空格><数据1>,<数据2>,…<数据8>

例如: DB 0C0H,0FFH,88H,56H

(5)BIT定义位

用于给字符名称赋值位地址

格式 <字符名称><空格>BIT<空格><位地址>

例如 SDA BIT P1.6

SCL BIT P1.7

CLK BIT 20H

OE BIT 2FH