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:\project\file2.s ;通知编译器当前源文件包含源文件 C:\project\file2.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 要求地址是字对齐的,而
ARM 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)