单片机原理实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 指令助记符和字节数

指令本身是一组二进制数代码,记忆起来很不方便,为了便于记忆,将这些代码用具有一定含义的指令助记符来表示,助记符一般采用有关英文单词的缩写,这样使用者就容易理解和记忆单片机的各种指令了。下面是两条分别用代码形式和助记符形式书写的指令:

尽管采用助记符后,书写的字符增多了,但由于增强了可读性,使用时会觉得更方便。采用助记符和其他一些符号来编写的指令程序,称为汇编语言源程序,汇编语言源程序经过汇编之后即可得到可执行的机器代码目标程序。

一条指令通常由两部分组成:操作码和操作数。操作码用来规定这条指令完成什么操作。例如,是做加减运算,还是数据传送等。操作数则表示这条指令所完成的操作对象,即是对谁进行操作。操作数可以直接是一个数,或者是一个数所在的内存地址。

操作码和操作数都是二进制代码。在8051单片机中,8位二进制数为一字节,指令是由指令字节组成的。对于不同的指令,指令的字节数不相同。8051单片机有单字节,双字节或三字节指令。

单字节指令中既包含操作码的信息,也包含操作数的信息。这可能有两种情况,一种是指令的含义和对象都很明确,不必再用另一个字节来表示操作数。例如,数据指针加1指令:INC DPTR,由于操作的内容和对象都很明确,故不必再加操作数字节,其指令码为:

另一种情况是用一字节中的几位来表示操作数或操作数所在的位置。例如,从工作寄存器向累加器A传送数据的指令:MOV A,Rn,其中Rn可以是8个工作寄存器中的一个,在指令码中分出三位来表示这8个工作寄存器,用其余各位表示操作码,指令码为:

其中最低3位码用来表示从哪个寄存器取数,故1字节也就够了。8051单片机共有49条单字节指令。

双字节指令一般用一个字节表示操作码,另一个字节表示操作数或操作数的地址。这时操作数或其地址就是一个8位二进制数,因此必须专门用一个字节来表示。例如,8位二进制数传送到累加器A的指令:MOV A,#data,其中#data表示8位二进制数,也叫立即数,这就是双节指令,其指令码为:

双字节指令的第二个字节,也可以是操作数所在的地址。8051 单片机共有45 条双字节指令。

三字节指令则是1字节的操作码,2字节的操作数。操作数可以是数据,也可以是地址,因此,可能有4种情况:

8051单片机共有17条三字节指令,只占全部指令的15%。一般而言,指令的字节数越少,则其执行速度越快,从这个角度来说,8051单片机的指令系统是比较合理的。