GNU风格 ARM汇编语法指南
.include “myarmasm.h”
l.incbin伪操作可以将原封不动的一个二进制文件编译到当前文件中,使用方法如下:
.incbin "file"[,skip[,count]]
skip表明是从文件开始跳过skip个字节开始读取文件,count是读取的字数.
<4>..if伪操作
根据一个表达式的值来决定是否要编译下面的代码, 用.endif伪操作来表示条件判断的结束,中间可以使用.else来决定.if的条件不满足的情况下应该编译哪一部分代码。
.if有多个变种:
.ifdef symbol @判断symbol是否定义
.ifc string1,string2 @字符串string1和string2是否相等,字符串可以用单引号括起来
.ifeq expression @判断expression的值是否为0
.ifeqs string1,string2 @判断string1和string2是否相等,字符串必须用双引号括起来
.ifge expression @判断expression的值是否大于等于0
.ifgt absolute expression @判断expression的值是否大于0
.ifle expression @判断expression的值是否小于等于0
.iflt absolute expression @判断expression的值是否小于0
.ifnc string1,string2 @判断string1和string2是否不相等, 其用法跟.ifc恰好相反。
.ifndef symbol, .ifnotdef symbol @判断是否没有定义symbol, 跟.ifdef恰好相反
.ifne expression @如果expression的值不是0, 那么编译器将编译下面的代码
.ifnes string1,string2 @如果字符串string1和string2不相等, 那么编译器将编译下面的代码.
<5>.global .type .title .list
l.global/ .globl :用来定义一个全局的符号,格式如下:
.global symbol 或者 .globl symbol
l.type:用来指定一个符号的类型是函数类型或者是对象类型, 对象类型一般是数据, 格式如下:
.type 符号, 类型描述
例:
.globl a
.data
.align 4
.type a, @object
.size a, 4
a:
.long 10
例:
.section .text
.type asmfunc, @function
.globl asmfunc
asmfunc:
mov pc, lr
<6>列表控制语句:
.title:用来指定汇编列表的标题,例如:
.title “my program”
.list:用来输出列表文件.
<7>ARM特有的伪操作
l.reg: 用来给寄存器赋予别名,格式如下:
别名 .req 寄存器名
l.unreq: 用来取消一个寄存器的别名,格式如下:
.unreq 寄存器别名
注意被取消的别名必须事先定义过,否则编译器就会报错,这个伪操作也可以用来取消系统预制的别名, 例如r0, 但如果没有必要的话不推荐那样做。
l.code伪操作用来选择ARM或者Thumb指令集,格式如下:
.code 表达式
如果表达式的值为16则表明下面的指令为Thumb指令,如果表达式的值为32则表明下面的指令为ARM指令.
l.thumb伪操作等同于.code 16, 表明使用Thumb指令, 类似的.arm等同于.code 32
l.force_thumb伪操作用来强制目标处理器选择thumb的指令集而不管处理器是否支持
l.thumb_func伪操作用来指明一个函数是thumb指令集的函数
l.thumb_set伪操作的作用类似于.set, 可以用来给一个标志起一个别名, 比.set功能增加的一点是可以把一个标志标记为thumb函数的入口, 这点功能等同于.thumb_func
l.ltorg用于声明一个数据缓冲池(literal pool)的开始,它可以分配很大的空间。
l.pool的作用等同.ltorg
l.space
分配number_of_bytes字节的数据空间,并填充其值为fill_byte,若未指定该值,缺省填充0。(与armasm中的SPACE功能相同)
l.word
插入一个32-bit的数据队列。(与armasm中的DCD功能相同)。可以使用.word把标识符作为常量使用。
例:
Start:
valueOfStart:
.word Start
这样程序的开头Start便被存入了内存变量valueOfStart中。
l.hword
插入一个16-bit的数据队列。(与armasm中的DCW相同)
8、GNU ARM汇编特殊字符和语法
<1>代码行中的注释符号:‘@’
<2>整行注释符号: ‘#’
<3>语句分离符号: ‘;’
<4>立即数前缀: ‘#’ 或 ‘$’
GNU风格ARM汇编语法指 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)