当前位置:首页 > 单片机 > 单片机
[导读]在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与理

在分析 2410 工程中启动代码的过程中,除了一些常用的汇编如 ldr,str,bic 等,还有一些很陌生的符号让我们很困惑,到网上一查资料,噢,原来是 ARM 的一些伪操作。为了在阅读启动代码的过程中不会出现很大的阅读与理解障碍,就总结了启动代码中用到的伪操作以供熟悉和查阅

PS: 这里说一下自己对汇编指令的看法,感觉就如英语单词似的,在进行阅读之前必须具备一些词汇量,但不需要精记,因为精记的话量太大太杂,不容易掌握,效果也不好。最好的方法是一些单词有一些大概的印象,也就是粗记,然后在阅读中不断的加强印象,最终牢固掌握它。

所以在这里不需要对所有的伪操作都记牢,配合着小例子先对其有个印象,然后在看启动代码的过程中不断的复习查阅,就能很快掌握之~~

全局操作

GET (或 INCLUDE )

语法格式:

GET 文件名

GET 伪操作用于将一个源文件包含到当前的源文件中 ,并将被包含的源文件在当前位置进行汇编处理。可以使用 INCLUDE 代替 GET 。可以使用路径信息(路径信息中可以包含空格)。

汇编程序中常用的方法是在某源文件中定义一些宏指令,用 EQU 定义常量的符号名称,用 MAP 和 FIELD 定义结构化的数据类型,这样的源文件类似于 C 语言中的 .H 文件。然后用 GET 伪操作将这个源文件包含到其他的源文件中。使用方法与 C 语言中的 include “*.h” 相似。

GET 伪操作只能用于包含源文件,包含目标文件需要使用 INCBIN 伪操作

使用示例:

AREA Init , CODE , READONLY

GET a1.s ;通知编译器当前源文件包含源文件 a1.s

GET C:projectfile2.s ;通知编译器当前源文件包含源文件 C:projectfile2.s

END

AREA

语法格式:

AREA 段名 属性 1 ,属性 2 , ……

AREA 伪指令用于定义一个代码段或数据段 。其中,段名若以数字开头,则该段名需用 “ | ” 括起来,如 |1_test| 。还有一些代码段具有约定的名称,如 |.text| 表示 C 语言编译器产生的代码段或者是与 C 语言库相关的代码段。

属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:

— CODE 属性:用于定义代码段,默认为 READONLY 。

— DATA 属性:用于定义数据段,默认为 READWRITE 。

— NOINIT 属性:指定本数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各内存单元初始化为 0.

— READONLY 属性:指定本段为只读,代码段默认为 READONLY 。

— READWRITE 属性:指定本段为可读可写,数据段的默认属性为 READWRITE 。 使用示例:

AREA Init , CODE , READONLY

该伪操作定义了一个代码段,段名为 Init ,属性为只读

ENTRY

语法格式:

ENTRY

ENTRY 伪操作用于指定汇编程序的入口点 。在一个完整的汇编程序中至少要有一个 ENTRY (也可以有多个,当有多个 ENTRY 时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY (可以没有)。

使用示例:

AREA Init , CODE , READONLY

ENTRY ;指定应用程序的入口点

……

END

语法格式:

END

END 伪操作用于通知编译器已经到了源程序的结尾 。

使用示例:

AREA Init , CODE , READONLY

……

END ;指定应用程序的结尾

符号操作

ALIGN

语法格式:

ALIGN { 表达式 { ,偏移量 }}

ALIGN 伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式 。其中,表达式的值用于指定对齐方式,可能的取值为 2 的幂,如 1 、 2 、 4 、 8 、 16 等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为: 2 的表达式次幂+偏移量。

下面的情况中,需要特定的地址对齐方式:

1 ) Thumb 的宏指令 ADR 要求地址是字对齐的,而 Thumb 代码中地址标号可能不是字对齐的。这时就要使用伪操作 ALIGN 4 使 Thumb 代码中的地址标号字对齐。

2 ) 由于有些 ARM 处理器的 CACHE 采用了其他对齐方式,如 16 字节的对齐方式,这时使用 ALIGN 伪操作指定合适的对齐方式可以充分发挥该 CACHE 的性能优势。

3 ) LDRD 以及 STRD 指令要求内存单元是 8 字节对齐的。这样在为 LDRD/STRD 指令分配的内存单元前要使用 ALIGN 8 实现 8 字节对齐方式。

4 ) 地址标号通常自身没有对齐要求。而在 ARM 代码中要求地址标号是字对齐的,在 Thumb 代码中要求字节对齐。这样需要使用合适的 ALIGN 伪操作来调整对齐方式。

使用示例:

在 AREA 伪操作中的 ALIGN 与 ALIGN 伪操作中表达式含义是不同的

AREA Init , CODE , READONLY , ALIEN = 3 ;指定后面的指令为 8 字节对齐。

CODE16 、 CODE32

语法格式:

CODE16 (或 CODE32 )

CODE16 伪操作告诉编译器,其后的指令序列为 16 位的 Thumb 指令 。

CODE32 伪操作告诉编译器,其后的指令序列为 32 位的 ARM 指令 。

若在汇编源程序中同时包含 ARM 指令和 Thumb 指令时,可用 CODE16 伪操作通知编译器其后的指令序列为 16 位的 Thumb 指令, CODE32 伪操作通知编译器其后的指令序列为 32 位的 ARM 指令。因此,在使用 ARM 指令和 Thumb 指令混合编程的代码里,可用这两条伪操作进行切换,但注意他们只是告诉编译器其后指令的类型,本身并不能对处理器进行程序状态的切换。

使用示例:

AREA Init , CODE , READONLY

……

CODE32 ;通知编译器其后的指令为 32 位的 ARM 指令

LDR R0 ,= NEXT + 1 ;将跳转地址放入寄存器 R0

BX R0 ;程序跳转到新的位置执行,并将处理器切换到 Thumb 工作状态

……

CODE16 ;通知编译器其后的指令为 16 位的 Thumb 指令

NEXT LDR R3 ,= 0x3FF

……

END ;程序结束

EQU ( “ * ” )

语法格式:

名称 EQU 表达式 { ,类型 }

EQU 伪操作用于为程序中的常量、基于寄存器的值和程序中的标号定义一个字符名称,其作用类似于 C 语言中的# define 。

名称为 EQU 伪操作定义的字符名称,表达式为基于寄存器的地址值、程序中的标号、 32 位的地址常量或者 32 位的常量。当表达式为 32 位的常量时,可以指定表达式的数据类型,可以有以下三种类型:

CODE16 、 CODE32 和 DATA

使用示例:

Test EQU 50 ;定义标号 Test 的值为 50

Addr EQU 0x55 , CODE32 ;定义 Addr 的值为 0x55 ,且该处为 32 位的 ARM 指令。

EXPORT (或 GLOBAL )

语法格式:

EXPORT 符号 {[WEAK]}

EXPORT 伪操作声明一个符号可以被其他文件引用,相当于声明了一个全局变量 。 EXPORT 可用 GLOBAL 代替。符号在程序中区分大小写, [WEAK] 选项声明其他的同名符号优先于该符号被引用。

使用示例:

AREA Init , CODE , READONLY

EXPORT DoAdd ;下面的函数名称 DoAdd 可以被其他源文件引用

DoAdd ADD r0,r0,r1

END

IMPORT

语法格式:

IMPORT 符号 {[WEAK]}

IMPORT 伪操作告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号 ,而且不论本源文件是否实际引用该符号,该符号均会被加入到本源文件的符号表中

符号在程序中区分大小

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭