



指令是规定计算机进行某种操作的指令。一个单片机所执行指令的集合即为单片机的指令系统。单片机使用机器语言、汇编语言及高级语言,但不管是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
在学习MCS-51的指令系统的过程中,应注意从以下 6 个方面来理解和掌握每一条指令。
(1)指令汇编格式的正确书写。
(2)指令的功能。
(3)指令的执行过程及结果。
(4)指令对标志位的影响情况。
(5)指令的寻址方式。
(6)指令的字节数和机器周期数。
单片机要执行某种操作或运算时,要先向CPU输入以二进制数为代码(机器码)的操作命令,这种操作命令就称为指令。指令是组成程序的基本元素。MCS-51指令系统即是指MCS-51提供的全部指令的集合。指令系统是与微处理器型号有关的,不同类型的CPU都有一套适用于它本身的指令系统。MCS-51指令系统的指令特点如下:
(1)指令执行时间快。
(2)指令短,约有一半的指令为单字节指令。
(3)用一条指令即可实现 2 个一字节的相乘或相除。
(4)具有丰富的位操作指令。
(5)可直接用传送指令实现端口的输入输出操作。
按指令机器码的长度,MCS-51单片机指令可分为单字节指令(单字节指令格式由8位二进制编码表示)、双字节指令(双字节指令格式由两个字节组成,操作码和操作数)、三字节指令(三字节指令格式中,第一个字节为操作码,后两个字节为操作数)。指令的字节越少,所占用的程序存储器空间也越少,所以编程时尽可能选用字节少的指令。
MCS-51系列单片机指令系统共有 111 条指令,按指令功能划分,可分为 5 大类:
(1)数据传送类指令(共 29 条)。
(2)算数运算类指令(共 24 条)。
(3)逻辑运算及移位类指令(共 24 条)。
(4)控制转移类指令(共 17 条)。
(5)位操作类指令(共17条)。
指令是以二进制代码形式表示的操作命令,这种二进制代码被称为机器码,它是计算机能够识别的唯一语言——机器语言。但机器语言难于记忆,可读性也差。为此,在编写程序时,常常用具有一定含义的助记符来表示相应的操作命令,并用英文缩写来表示指令,例如MOV指令表示传送。无论是用助记符或机器码表示的指令,都是一一对应的。
一条完整的MCS-51系列单片机汇编语言的指令格式如下:
· 标号 :表示该指令所在的起始地址,是一种符号地址。由英文字母加数字组成,其中第一个字符必须是字母,其余字母可以是字母、数字或其他特定符号,标号后跟分界符“:”,一般每个程序段的第一条指令和转移指令的目的指令前需有一个标号。
· 操作码 :指令助记符,规定了指令所能完成的操作功能。每条指令必有一操作码,而标号、操作数和注释可以根据情况选择有或无。
· 操作数 :指出了指令的操作对象。操作数可以是一个具体的数据,也可以是存放数据的单元地址,还可以是符号常量或符号地址等。在一条指令中可能有多个操作数,操作数与操作数之间用逗号“,”分隔。
· 注释 :该指令的操作的说明,为了方便阅读程序而添加的解释说明性文字,用“;”开头。
例如:一条完整汇编指令LOOP:MOV A,#20H;把数20H送入累加器A中
翻译成机器码则为LOOP:74H;操作码规定的操作性质是将紧跟该操作码(74H)的数(20H)送入累加器A中(E0H单元)。
在MCS-51系列单片机指令系统中,指令的字长有单字节、双字节、三字节三种,在程序存储器中分别占用 1~3 个单元。其格式分别如下所示:
在学习MCS-51系列单片机指令系统的功能前,我们先了解一些经常使用的特殊符号的意义,这对今后程序的编写都是相当有用的。
· Rn :当前选中的工作寄存器组中的 8个工作寄存器R0~R7(n=0~7)之一。
· Ri :通用寄存器组中可作为地址指针寄存器的两个寄存器R0和R1(i=0,1)。
· Direct :片内数据存储单元的 8 位地址。包含 0~127(255)内部存储单元地址和特殊功能寄存器的单元地址或符号。因此在指令中direct表示直接寻址方式。
· #data :指令中的 8 位立即数。
· #data16 :指令中的16位立即数。
· addr16 :只限于在LCALL和LJMP指令中的16位目的地址,其空间为64KB程序存储器地址。
· addrl l :只限于在ACALL和AJMP指令中的 11位目的地地址,目的地址必须放在与下条指令第一个字节同一个2KB程序存储器空间之中。
· rel :补码形式表示的 8位地址偏移量,用于所有的条件转移和SJMP等指令中,地址偏移量从下条指令的第一个字节开始在-128~+127范围内。
·@:间接寄存器寻址或基址寄存器的前缀标志。
·/:加在位地址前面,表示对该位先求反再参与操作,但不影响该位的值。
· DPTR :数据指针。
· bit :片内RAM位寻址区或可位寻址的特殊功能寄存器的位地址。
· A :累加器A。用于加法和减法指令中。
· B :累加器B。用于乘法和除法指令中。
· C :进位标志位,是布尔处理机的累加器,也称位累加器。
·( X ):由X指定的寄存器或地址单元中的内容。
·(( X )):由X寄存器的内容作为地址的存储单元的内容。
·$:本条指令的起始地址。
·←:指令操作流程,将箭头右边的内容送到箭头左边的单元中。
应说明的是,凡指令表上标明符号的地方,在使用时必须根据符号要求,选用具体数值,不能直接写成上述符号。例如不能有“MOV A,Rn”这种写法。