单片机原理及应用(第2版)
上QQ阅读APP看书,第一时间看更新

4.1 助记符语言

4.1.1 助记符语言概述

从实际应用的角度看,掌握单片机的硬件结构、应用系统的硬件连接和程序编制是非常重要的。熟悉了单片机的内部结构和工作方式以后,可学习指令系统并练习编写简单的程序。

一般的应用程序既可以用高级语言编写,也可以用机器指令代码编写。高级语言常用在计算和管理的场合,而机器指令代码常用在实时(现场)控制场合。高级语言要被机器识别和执行,必须由相关的计算机软件(解释、编译程序)翻译成机器指令程序。一般情况下,翻译出的目标程序结构比较松散,占用程序空间较大,执行效率低。与此相反,由机器指令代码编制的程序则比较简练,执行效率较高。

若用机器指令编写程序,首要的问题是了解和熟悉机器指令。不同的指令,具有不同的功能和不同的操作对象。助记符是人们为了便于记忆指令而使用的指令符号,它根据机器指令不同的功能和操作对象来描述和分类。助记符指令不能直接被单片机执行,必须通过手工或者相应的汇编工具,将其汇编成二进制代码才能被单片机执行。助记符一般是由操作码和操作数两部分组成的。操作码反映了指令的功能,操作数代表了指令的操作对象。

例如,ADD A,#8BH指令表示“把十六进制数8BH和累加器A的内容相加,将结果存在累加器A中”。其中ADD是操作码符号,A和8BH是操作数。前者反映了该指令的功能是做加法,后者则表示相加的对象是A累加器中的内容和十六进制数8BH。

随着技术的进步,目前大多数单片机的编译系统都支持C语言编程,并且,可以对编译的代码进行优化。使用C语言编程,具有编写简单、直观易读、通用性好等特点,特别是在控制任务比较复杂或者具有大量运算的系统中,C语言更显示出了超越汇编语言的优势。然而,汇编语言是理解和掌握单片机原理及应用的基础,并且,在控制系统不太复杂、实时性要求较高的控制系统中,较多的用户还是使用汇编语言进行程序设计。另外,在嵌入式操作系统的移植中,也需要了解部分汇编语言的使用。学习汇编语言程序设计对于读懂并升级其他工程师利用汇编语言开发的工程项目也是非常重要的。

4.1.2 操作码

操作码是指令功能的英文缩写。表4-1给出了8051单片机指令系统中最常用的操作码。

表4-1 8051单片机常用操作码一览表

4.1.3 操作数

操作数是一条指令操作的对象。不同功能的指令,操作对象形式不同。

传送类指令,必须指明操作对象从哪儿来(源地址),传到何处去(称为目的地址)。在书写格式上,目的地址写在前,源地址写在后,例如:MOV 50H,70H表示把源地址70H里的内容送到目的地址50H中去。

数据操作类指令,一般靠运算器完成,有两个输入内容,其中之一常常是累加器A的内容,而且运算后的结果也常常输出到累加器A中,所以数据操作类指令的对象一般是两个。例如,SUBB A,#56H指令表示的功能为:累加器A的内容减去56H这个数,并减去借位,所得结果放入累加器A中。

程序控制类指令的操作对象是程序计数器PC和一个数(控制程序去向的绝对或相对转移地址),但因为其中的一个操作对象一定是PC寄存器,所以在助记符书写时都省略不写。

逻辑操作类有单操作数和双操作数之分,一般“与”“或”“非”需两个操作数,结果放入目的操作数中。而循环移位操作则固定在累加器A中进行,清“0”、置位、求反等操作均是针对某一位地址而言的,所以只需一个单操作数。

操作数可以是数据,也可以是地址,而且更常见的是地址。

操作数是指令中给出的数据时,被称为立即数。它有8位和16位二进制数两种。在助记符的数字前加以“#”来标记其是立即数。例如,SUBB A,#56H中的56H就是立即数。

操作数也可以是存放数据的地址,这是更常见的操作对象,这些地址可以是:

1)所选定寄存器工作区内的R7~R0,A、B、CY(进位标志)、AB(双字节),DPTR(双字节)等可编址的寄存器。

2)片内数据存储器中低128字节,特殊功能寄存器SFR,可寻址的位。

3)片外数据存储器空间。

4)程序存储器空间。

注意:编写程序时,操作数的最高位大于9时,在操作数的最高位前要加写0。否则,编译会提示出错。例如:MOV A,#0F8H是正确的,而MOV A,#F8H是不正确的。