新闻中心

EEPW首页>嵌入式系统>设计应用> ARM汇编程序基本知识

ARM汇编程序基本知识

作者: 时间:2016-11-28 来源:网络 收藏

如:

Str DCB “this is a test” ;分配一片连续的字节存储单元并初始化

Data DCW 1,2,3 ;分配一片连续的半字存储单元并初始化

Data DCD 4,5,6 ; 分配一片连续的字存储单元并初始化

Fdata DCFS 2e5,-5e-7 ;分配一片连续的字存储单元并初始化为指定的单精度数

Dspce SPACE 100 ;分配连续100字节的存储单元并初始化为0

控制伪操作

IF ELSE ENDIF

WHILE WEND

MACRO MEND;MEXIT

信息报告伪操作

ASSERT

INFO

OPT

其他常用伪操作

AREA ALIGN CODE16/CODE32 ENTRY END EQU EXPORT(GLOBLE) IMPORT EXTERN GET(INCLUDE) INCBIN RN ROUT

AREA

格式:AREA 段名 属性1,属性2,……

常用属性有:

CODE :用于定义代码段,默认为READONLY

DATA: 定义数据段,默认为READWRITE

READONLY: 指定本段为只读

READWRITE: 指定本段为读写

ALIGN: 使用方式为ALIGN表达式。在默认时,ELF(可执行链接文件)的代码段和数据段是按字对齐的。表达式的取值范围为0~31,相应的对齐方式为2次幂。

COMMON: 定义一个通用的段,不包含任何用户的代码和数据。各源文件中同名的COMMON段共享同一段存储单元。

ALIGN

格式:ALIGN [表达式[,偏移量]]

ALIGN伪操作可通过添加填充字节的方式,使当前位置满足一定的对齐方式。

例:

……

DATA1DCB “STRIN” ; 定义后不能保证地址对齐

ALIGN 4 ;确保当前地址是4字节对齐

……

例:

AREA Cache, CODE, ALIGN=3 ; 指定本代码段的指令时23=8字节对齐的

……

MOV PC, LR ;程序跳转后是4字节对齐,返回后需要继续8字节对齐

ALIGN 8 ;当前位置再次满足8字节对齐

……

注意上面,在AREA中使用和单独使用ALIGN的区别,格式和计算方式不一样。

ENTRY

用于指定汇编程序的入口点。一个程序可以由一个或者多个源文件组成,一个源文件由一个或者多个程序段组成。一个程序至少有一个入口点,也可有多个入口点,但是在一个源文件中,最多只能有一个ENTRY。当有多个ENTRY时,程序的真正入口点由链接器指定。编译程序在编译连接时根据程序入口点进行连接。在只有一个入口点时,编译程序会把这个入口点的地址定义为系统复位后的程序起始点。

END

在源文件结束处写上,表示源程序的结尾。

EXPORT

格式:EXPORT 标号 [,WEAK]

声明一个全局标号,该标号在其他文件中可引用。WEAK表示碰上其他同名标号时,其他标号优先。

AREA INIT, CODE, READONLY

EXPORT Stest

……

END

IMPORT

格式:IMPORT 标号 [,WEAK]

表示该引用的标号在其他源文件中,但要在当前文件中引用。WEAK表示找不到该标号时,也不报错,一般讲该标号值置为0,如果是B或者BL使用到,则该指令置为NOP。

与EXTERN的不同的是,无论当前文件是否引用该标号,该标号都被加入当前源文件的符号表中。

AREA INIT, CODE, READONLY

IMPORT MAIN;

……

END

EXTERN

和IMPORT一样,不同之处在于,如果当前文件没有引用该标号,该标号不会加入当前源文件的符号表中。

GET(或INCLUDE)

将一个源文件包含到当前的源文件中,并在当前位置进行编译。

AREA INIT, CODE, READONLY

GET a1.s

GET C:/a2.s

……

END

INCBIN

将一个目标文件或者数据文件包含到当前,文件内容被原封不动的放在当前位置,编译器不对文件内容进行编译。

AREA INIT, CODE, READONLY

GET a1.s ; 包含a1.s并且对a1.s进行编译

INCBIN C:/d.txt ; 包含d.txt,不对内容进行编译

GET a2.s ; 包含a2.s,并对内容进行编译

END

RN

给一个寄存器定义一个别名。

Temp RN, R0 ; 将R0定义一个别名 Temp


上一页 1 2 下一页

评论


技术专区

关闭