您当前的位置:五五电子网电子知识单片机-工控设备51单片机汇编语言程序设计概述 正文
汇编语言程序设计概述

汇编语言程序设计概述

点击数:7995 次   录入时间:03-04 11:46:02   整理:http://www.55dianzi.com   51单片机
      程序是若干指令的有序集合,单片机的运行就是执行这一指令序列的过程,编写这一指令序列的过程称为程序设计。
  
  单片机编程语言
  
  目前,用于单片机编程的常用语言是汇编语言和高级语言。
  
  1.汇编语言
  
  为了克服机器语言的缺点,用英文字符来代替机器语言,这些英文字符被称为助记符,用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序。
  
  汇编语言源程序需转换成二进制代码表示的机器语言程序,单片机才能识别和执行,通常把这一转换(翻译)工作称为“汇编”。完成“翻译”工作的程序称为汇编程序。经汇编程序“汇编”得到的以0、1代码形式表示的机器语言程序称为目标程序。
  
  用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此用汇编语言能编写出最优化的程序,缺点是可读性差。汇编语言离不开具体计算机的硬件,与硬件紧密相关。因此,汇编语言是属于面向“硬件”的语言,缺乏通用性。
  
  2.高级语言
  
  与汇编语言相比,高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。
  
  近年来,面向自动控制、工程设计等方面的高级语言发展很快,尤其在单片机的程序设计方面也已经较为广泛地采用了高级语言。例如,目前多数的51单片机用户使用C语言来进行程序设计。C语言已经成为举世公认的高级语言中高效简洁而又贴近51单片机硬件的编程语言。将C语言向单片机上移植,始于20世纪80年代的中后期。经过十几年的努力,C语言已经成为单片机的实用高级编程语言。用C语言进行单片机的软件开发,可大大缩短开发周期,且明显地增加软件的可读性,便于改进和补充。尽管目前已有不少程序设计人员使用C语言来进行51单片机的应用程序开发,但是在对程序的空间和时间要求很高的场合,汇编语言仍是必不可少的。在这种场合下,可使用C语言和汇编语言混合编程。在很多需要直接控制硬件且对实时性要求较高的场合,则更是非用汇编语言不可。从某种意义上来说,掌握汇编语言并能使用汇编语言来进行程序设计,是学习和掌握单片机程序设计的基本功之一。
  
  汇编语言语句和格式
  
  汇编语言语句有两种基本类型:指令语句和伪指令语句。
  
  (1)指令语句  每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。
  
  (2)伪指令语句  伪指令语句是控制汇编(翻译)过程的一些控制命令。在汇编时没有机器代码与之对应。
  
  下面首先介绍汇编语言指令语句的格式。  
  汇编语言语句是符合典型的汇编语言的四分段格式:
  670
  上述格式中,标号字段和操作码字段之间要用冒号“:”分隔,操作码字段和操作数字段间的分界符是空格,双操作数之间用逗号相隔,操作数字段和注释字段之间的分界符用分号“;”。任何语句都必须有操作码字段,其余各段为任选项。
  
  【例4-1】下面是一段汇编语言程序的四分段书写格式。
  671
  有关上述4个字段在汇编语言程序中的作用以及应该遵守的基本语法规则如下。
  
  1.标号字段
  
  标号是语句所在地址的标志符号,有了标号,程序中的其他标号才能访问该语句。如例4-1中的标号“START”和“LOOP”等。有关标号的规定如下:
  
  (1)标号后边必须跟冒号“:”。
  
  (2)标号由1~8个ASCII码字符组成,但第一个字符必须是字母。
  
  (3)同一标号在一个程序中只能定义一次,不能重复定义。
  
  (4)不能使用汇编语言已经定义的符号作为标号,如指令助记符、伪指令以及寄存器的符号名称等。
  
  (5)一条语句可以没有标号,标号的有无取决于本程序中的其他语句是否访问该条语句。
  
  如无其他语句访问该条语句,则该语句前不需要标号。
  
  2.操作码宇段
  
  操作码字段规定了语句执行的操作,操作码是汇编语言指令中唯一不能空缺的部分。
  
  3.操作数字段
  
  操作数用于存放指令的操作数或操作数地址。在操作数字段中,操作数的个数因指令的不同而不同,通常有单操作数、双操作数和无操作数三种情况。如果是双操作数,则操作数之间要以逗号隔开。
  
  在操作数的表示中,有以下几种情况需要注意:
  
  (1)十六进制、二进制和十进制形式的操作数表示  在大多数情况下,操作数或操作数地址是采用十六进制形式来表示,只有在某些特殊场合才采用二进制或十进制的表示形式。若操作数采用十六进制形式,则需加后缀“H”;若操作数采用二进制形式,则需加后缀“B”;若操作数采用十进制形式,则需加后缀“D”,也可以省略后缀“D”。若十六进制的操作数以字符A~F中的某个开头,则还需在它前面加1个“O”,以便在汇编时把它和字符A~F区别开。
  
  (2)工作寄存器和特殊功能寄存器的表示  当操作数在某个工作寄存器或特殊功能寄存器中时,操作数字段允许采用工作寄存器和特殊功能寄存器的代号来表示。例如,工作寄存器用R7~RO,累加器用A(或ACC)表示。另外,工作寄存器和特殊功能寄存器也可用其地址来表示,如累加器A可用EOH来表示,EOH为累加器A的地址。
  
  4.注释字段
  
  注释字段用于解释指令或程序的含义,对编写程序和提高程序的可读性非常有用。注释字段使用时必须以分号“;”开头,注释的长度不限,一行写不下可以换行书写,但必须注意也要以分号“;”开头。在汇编时,汇编程序遇到“;”时,就停止“翻译”。因此,注释字段不会产生机器代码。
  
  伪指令
  
  程序设计者使用汇编语言编写的汇编语言源程序必须“汇编(翻译)”成机器代码(即指令代码)才能运行。在汇编语言源程序中应有向汇编程序发出的指示信息,告诉它如何完成汇编工作,这一任务是通过使用伪指令来实现的。
  
  伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。只有在汇编前的源程序中才有伪指令。所以“伪”体现在汇编后,伪指令没有相应的机器代码产生。
  
  伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编、分配存储空间等功能。
  
  不同汇编语言的伪指令也有所不同,但一些基本内容却是相同的。
  
  下面介绍MCS- 51汇编语言程序中常用的伪指令。
  
  1.ORG(ORiGin)汇编起始地址命令
  
  在汇编语言源程序的开始,通常都用一条ORG伪指令规定程序的起始地址。如果不用ORG,则汇编得到的目标程序将从OOOOH地址开始。例如:
  690
  即规定标号START代表地址为2000H开始。
  
  在一个源程序中,可以多次使用ORG指令来规定不同的程序段的起始地址。但是,ORG指令后的地址必须由小到大排列,且不能交叉、重叠。例如:
  691
  这种顺序是正确的。若按下面顺序的排列则是错误的,因为地址出现了交叉。
  692
  2.END(END of assembly)汇编终止命令
  
  该命令是汇编语言源程序的结束标志,用于终止源程序的汇编工作,它的作用是告诉汇编程序,将某一段源程序翻译成指令代码的工作到此为止。因此。在整个源程序中只能有一条END命令,且位于程序的最后。如果END命令出现在程序中间,则其后的源程序,将不进行汇编处理。
  
  3.EQU(EQUate)标号赋值命令
  
  该命令用于给标号赋值。赋值以后,其标号值在整个程序有效。例如:
  
  TEST:EQU    2000H
  
  表示标号TEST=2000H,在汇编时,凡是遇到标号TEST时,均以2000H来代替。

[1] [2]  下一页


本文关键字:程序设计  51单片机单片机-工控设备 - 51单片机