当前位置:首页 > 单片机 > 单片机
[导读] 一.前言1.看一个程序:AREATigerJohn,CODE,READONLY;声明代码段CODE32;声明为32位ARM指令ENTRY;声明程序入口STARTMOVR0 ,#0MOV R1 ,#1ADD R1, R1,R0BSTARTEND2.在ARM汇编程序中用“;”号进行注释。

一.前言

1.看一个程序:

AREATigerJohn,CODE,READONLY;声明代码段

CODE32;声明为32位ARM指令

ENTRY;声明程序入口

STARTMOVR0 ,#0

MOV R1 ,#1

ADD R1, R1,R0

BSTART

END

2.在ARM汇编程序中用“;”号进行注释。

二.汇编语言程序格式

一个完整的ARM汇编由两部分组成:声明,实际代码段两部分组成。

1.声明:在一个程序之前先要进行声明

1>都要声明什么

l声明代码段:

用AREA指令定义一个段,说明所定义段的相关属性

(说明段的名字,段的属性)

l声明ARM指令:

用CODE32或CODE16来声明程序为32位ARM指令或是16位Thumb指令。

l声明程序入口:用ENTRY指令标识程序的入口点。

2>这3个声明缺一不可。

3>在程序完成后要用END指令声明程序结束。每一个汇编程序段都必须有一条END指令,指示代码段的结束。

2.段

1>在ARM汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。

2>段的分类

?代码段:代码段的内容为执行代码

?数据段:数据段存放代码运行时需要用到的数据。

注:一个汇编程序至少有一个代码段。如果程序较长时,可以分割为多个代码段和数据段。多个段在程序编译连接时最终形成一个可执行的映像文件。

3>段具有以下的属性

?READONLY

?READWRITE

三.汇编语言的语句格式

[LABEL]OPERATION[OPERAND] [;COMMENT]

标号域操作助记符域操作数域注释域

1.标号域(LABLE)

1>标号域用来表示指令的地址、变量、过程名、数据的地址和常量。

2>标号是可以自己起名的标识符,语句标号可以是大小写字母混合,通常以字母开头,由字母、数字、下划线等组成。

3>语句标号不能与寄存器名、指令助记符、伪指令(操作)助记符、变量名同名。

4>语句标号必须在一行的开头书写,不能留空格。

2.操作助记符域(OPERATION)

1>操作助记符域可以为指令、伪操作、宏指令或伪指令的助记符。

2>ARM汇编器对大小写敏感,在汇编语言程序设计中,每一条指令的助记符可以全部用大写、或全部用小写,但不允许在一条指令中大、小写混用。

3>所有的指令都不能在行的开头书写,必须在指令的前面有空格,然后再书写指令。

4>指令助记符和后面的操作数或操作寄存器之间必须有空格,不可以在这之间使用逗号。

3.操作数域(OPERAND)

操作数域表示操作的对象,操作数可以是常量、变量、标号、寄存器名或表达式,不同对象之间必须用逗号“,”分开。

四.ARM指令集格式

opcode{}{S},{,}

1.其中<>中的项是必须的,{}中的项是可选的。

2.opcode表示指令助记符。

cond:表示执行条件。

S:表示是否影响CPSR寄存器的值。

Rd:表示目标寄存器。

Rn:表示第一个操作数的寄存器。

operand2:表示第2个操作数。

3.“operand2”具有如下的形式:

1>#immed_8r:常数表达式

eg:MOVR0,#1

ADDR0,R1,#0X0F

2>Rm:寄存器形式。

即在寄存器方式下,操作数即为寄存器的数值。

eg:MOVPC,R0

ADDR1,R1,R2

3>Rm,shift:寄存器移位方式。

将寄存器的移位结果作为操作数,当Rm值保持不变。

?ASR #n:表示算术右移n位。

?LSR#n:表示逻辑右移n位。

?ROR #n:表示循环右移n位。

?RRX#n:带扩展的循环右移n位。

?LSL#n:逻辑左移n位。

3.使用条件码“cond”可以实现高效的逻辑操作,提高代码的效率。

?所有的ARM指令都可以条件执行。

?Thumb指令只有B(跳转)指令具有条件执行功能。

注:如果执行中不表明条件码,默认为无条件(AL)执行。

五.汇编程序中常用的符号

在汇编语言程序设计中,经常使用各种符号表示变量、常量和地址

?符号由大小写字母、数字以及下划线组成。

?符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。

?符号在其作用范围内必须唯一,即在其作用范围内不可有同名的符号。

?自定义的符号名不能与系统的保留字相同。

符号名不应与指令或伪指令同名。

1.程序中的变量:

1>ARM汇编程序所支持的变量有数字变量,逻辑变量和字符串变量

2>在ARM汇编程序设计中,可使用GBLA,GBLL,GBLS伪定义声明全局变量,使用LCLA,LCLL,LCLS声明局部变量,并可使用SETA,SETL和SETS对其经行初始化。

2.程序中的常量

1>ARM汇编程序所支持常量有数字常量,逻辑常量和字符串常量。

3.程序中的变量代换

1>程序中的变量可通过代换操作取的一个常量。代换操作符为”$”

2>使用示例:


LCLSS1

LCLSS2;定义局部字符串变量S1和S2

S1SETS“Test!”

S2SETS“This is a $ S1”;S2的值为“This is a Test


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

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 隧道灯 驱动电源
关闭