当前位置:首页 > 单片机 > 单片机
[导读]MCS-51单片机的汇编语言程序由若干条汇编语言指令和伪指令构成。指令存放在程序存储器中,被单片机读取并执行,且执行结果将影响单片机自身的状态。

MCS-51单片机的汇编语言程序由若干条汇编语言指令和伪指令构成。指令存放在程序存储器中,被单片机读取并执行,且执行结果将影响单片机自身的状态。

本节将介绍伪指令的格式和使用方法。“伪”即是假,伪指令是说明性的指令,与真正的指令不同,不会存储在存储器中,也不会被单片机的CPU所执行,其作用是仅仅是控制汇编软件的汇编过程。汇编软件的作用是将汇编语言程序翻译成机器代码。

1.伪指令的格式

MCS-51单片机伪指令的格式为:

[标号:]  伪指令助记符  参数1[,参数2,……]  [;注释]

其中,由中括号“[]”标注的部分是可选项,可以不出现;伪指令助记符指明要进行的汇编操作;参数1和参数2等可以是常量和表达式等;注释必须以分号“;”开头,不影响汇编操作,由编程者根据需要自主编写。需要特别注意的是:标号不能是保留字,不能以数字开头,可以包含字母、数字和一些特殊符号(如“_”“$”“?”“@”等),不能包含算术逻辑运算符(如“+”“-”“*”“&”等)。

2.定位伪指令ORG

伪指令ORG用于程序存储器中的存储单元定位,其格式为:

ORG   K16

其中,K16是一个16位的无符号数,代表程序存储器的地址;ORG表示定位程序存储器的位置到地址为K16的存储单元,在该伪指令之后定义的变量或书写的指令都将从该存储单元开始存放。

3.汇编结束伪指令END

伪指令END写在汇编语言程序的末尾,代表程序的结束。汇编软件在将汇编语言程序翻译成机器代码时,遇到END将停止汇编,END之后书写的指令将不被处理。

【例3-1】ORG和END的使用。源程序及其在ROM中的存放情况如下:

本例中有两条指令“MOV A,12H”与“SJMP$”,其机器代码分别是“E512H”和“80FEH”,被连续存放在ROM的字节单元中,存放的起始单元地址由“ORG 0000H”确定为“0000H”。END代表这个程序的结束。

4.定义字节伪指令DB

伪指令DB用于定义字节型的变量,其格式为:

[标号:]  DB  字节数据或字节数据表  [;注释]

其中,“标号”是所定义的变量的名字,该变量既可以是一个字节型数据,也可以是由多个字节型数据构成的数据表,表中的元素由逗号分开,并被连续地存入程序存储器的字节单元中。

需要注意的是:变量名字一经定义后,就可以代表变量的地址或变量数据表首元素的地址。例如在【例3-2】中,变量名STR_A代表了字节数据表“12H,34H”中第一个数字12H在程序存储器中的存放地址,即2000H。

【例3-2】DB的应用。源程序及其在ROM中的存放情况如下:

在本例中,“ORG 2000H”的作用是:将其后定义的变量STR_A、STR_B、STR_C和STR_D存放于程序存储器中起始地址为2000H的连续字节单元中。需要注意的是:①负数将被自动转换成补码存入存储器中,如“-2”将以FEH的形式存放;②字符型数据将被转换成ASCII码存放,如‘A’将被自动转换成41H后存放于存储器中。

【例3-3】多个ORG的应用。源程序及其在ROM中的存放情况如下:

在本例的程序中,“ORG 2007H”可以重新确定数据存放的位置,使数据不再连续存放。需要注意的是:当程序中有多个ORG时,ORG后面的数字应该从小到大变化,且不能重复。

5.定义字节DW

DW用于定义字型变量,其格式为:

[标号:]  DW  字数据或字数据表  [;注释]

字型变量在存储器中占用两个字节。MCS-51单片机的字型变量以“大端存储”的方式存放。所谓“大端存储”是指多字节数据存放时,高字节数据存于地址小的存储单元中,低字节数据存于地址大的存储单元中。而“小端存储”则与之相反。

【例3-5】DW的应用。源程序及其在ROM中的存放情况如下:

在这个例子中,DW定义的每个变量元素都在存储器中占用2个字节单元(即1个字单元)。不够2个字节的元素被扩展成两个字节,扩展时,正数或无符号数在高位补0,即“零扩展”,如:34H和1分别被扩展为0034H和0001H;而负数被直接转换成2个字节的补码,即“符号位扩展”,如:-1被扩展为0FFFFH。

6.等值伪指令EQU

伪指令EQU的格式为:

字符名  EQU  数、汇编符号或表达式

EQU的作用是将“数、汇编符号或表达式”赋予“字符名”,建立“数、汇编符号或表达式”与“字符名”之间的等价关系。在汇编语言程序中,经过EQU定义后的“字符名”可以代替对应的“数、汇编符号或表达式”。需要注意的是,由EQU定义的字符名必须先定义后使用,并且表达式必须能计算得到数值。

7.数据地址赋值伪指令DATA

伪指令DATA的格式为:

字符名  DATA  数或表达式

DATA用于字符名赋值。需要注意的是:①由DATA定义的字符名可以先使用后定义;②与字符名建立等价关系的只能是数或可计算出结果的表达式,不能是汇编符号。

【例3-7】DATA的应用。程序如下:

将例3-6中的EQU换成DATA就可以得到本例中的程序。但是需要注意伪指令“REG DATA R1”是错误的,因为DATA不能将汇编符号(如工作寄存器的符号R1)赋予字符名。另外,“#”符号不能出现在EQU和DATA伪指令定义中,如“NUM EQU#12H”和“NUM DATA#12H”都是错误的。

8.位地址符号定义伪指令BIT

伪指令BIT的格式为:

字符名  BIT  位地址表达式

伪指令的作用是给位地址定义一个等价的字符名。

【例3-8】BIT的应用。源程序如下:

在本例中,左、右两侧的程序等价。在左侧程序中,LED和BUZZER分别等价于位地址P0.4和20H。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭