3.1 指令系统简介

指令是规定计算机进行某种操作的命令。一台计算机所能执行的指令集合称为该计算机的指令系统。计算机的主要功能是由指令系统来体现的,指令系统与机器密切相关,指令系统是由计算机生产厂商定义的,不同系列的机器其指令系统是不同的。

3.1.1 指令概述

计算机内部只识别二进制数,因此,能被计算机直接识别、执行的指令是使用二进制编码表示的指令,这种指令被称为机器语言指令。机器语言具有难学、难记、不易书写、难以阅读和调试、容易出错而且不易查找错误,程序可维护性差等缺点。为方便人们的记忆和使用,制造厂家对指令系统的每一条指令都给出了助记符,助记符是用英文缩写来描述指令的功能,它不但便于记忆,也便于理解和分类。以助记符表示的指令就是计算机的汇编语言指令,汇编语言指令与机器语言指令具有一一对应的关系。

与通常的计算机一样,89C51单片机也只能识别二进制编码表示的机器语言。同样,为了人们记忆和使用方便,也采用汇编语言指令来描述它的指令系统。

89C51单片机指令系统共有111条指令,按功能划分,可分为五大类:

(1)数据传送类指令(29条);

(2)算术运算类指令(24条);

(3)逻辑运算及移位类指令(24条);

(4)控制转移类指令(17条);

(5)位操作类指令(17条)。

3.1.2 指令格式

一条完整的89C51单片机汇编语言的指令格式如下。

[标号:]〈操作码〉[操作数][;注释]

标号——该指令的起始地址,是一种符号地址。

标号可以由1~8个字符组成,第一个字符必须是字母,其余字符可以是字母、数字或其他特定符号,标号后跟分界符“:”。

操作码——指令的助记符,规定了指令所能完成的操作功能。

操作数——指出了指令的操作对象,操作数可以是一个具体的数据,也可以是存放数据的单元地址,还可以是符号常量或符号地址等。

在一条指令中可能有多个操作数,操作数与操作数之间用逗号“,”分隔。

注释——为了方便阅读而添加的解释说明性的文字,用“;”开头。

操作码与操作数之间必须用空格分隔,带方括号项称为可选项。由指令格式可见,操作码是指令的核心,不可缺少。

在89C51单片机指令系统中,指令的字长有单字节、双字节、三字节三种,在程序存储器中分别占用1~3个单元。

3.1.3 指令中常用符号说明

在描述89C51单片机指令系统的功能时,经常使用的符号及意义如下:

Rn——当前选中的工作寄存器组中的寄存器R0~R7之一,所以n=0~7;

Ri——当前选中的工作寄存器组中可作为地址指针的寄存器R0、R1,所以i=0、1;

#data——8位立即数;

#data16 ——16位立即数;

direct——内部RAM的8位地址,既可以是内部RAM的低128个单元地址,也可以是特殊功能寄存器的单元地址或符号,因此在指令中direct表示直接寻址方式;

addr11 ——11位目的地址,只限于在ACALL和AJMP指令中使用;

addr16 ——16位目的地址,只限于在LCALL和LJMP指令中使用;

rel——补码形式表示的8位地址偏移量,在相对转移指令中使用;

bit——片内RAM位寻址区或可位寻址的特殊功能寄存器的位地址;

@ ——间接寻址方式中间址寄存器的前缀标志;

C——进位标志位,是布尔处理机的累加器,也称为位累加器;

/——加在位地址的前面,表示对该位先求反再参与操作,但不影响该位的值;

(X)——由X指定的寄存器或地址单元中的内容;

((X))——由X寄存器的内容作为地址的存储单元的内容;

$ ——本条指令的起始地址;

← ——指令操作流程,将箭头右边的内容送到箭头左边的单元中。