blMMU_SetAsyncBusMode
|;类似#else
bl MMU_SetFastBusMode; default value.
];类似#endif
示例3[ THUMBCODE类似#ifdefTHUMBCODE
bx lr
| ;类似#else
movpc,lr
];类似#endif
n段定义AREA
n指令集定义CODE16和CODE32
指示是Thumb指令集(压缩指令集,每个指令16位)。还是普通32位指令集
n汇编结束:END
n程序入口ENTRY
一个基本ARM程序结构
ARM汇编程序结构
源代码由文本文件组成.按照汇编的编译器不同,分为两大量,一类是ADS的汇编程序,一类是GNU汇编格式,两者在指令集是完成一样,但是在伪指令.程序结构等方法各不同相同.本节主要是讲解ADS汇编格式.
ADS汇编程序,主要包含如下几类程序
n汇编源程序,后缀名是.S
n汇编包含文件,后缀名是.inc
n如果是与C混和编程..C,.h也能识别
ARM汇编语句格式
[标号]<指令|条件|S> <操作数> [;注释]
l所有标号顶格写,而指令和伪指令不能顶格写
l标识符(标号,指令)大小写敏感,所以要在标号和指令时书写一致,一般伪指令,指令,寄存器名可以全部为大写
l注释以;开头,可以顶格写
l可以使用\来分行写太长语句
l变量,常量的定义必须在一行顶格写
常量的书写
l数字常量
在程序中直接写数字,十进制12,256,十六进制0x1228,
l字符常量
类似于C的定义,用SETS来定义字符常量
HELLO SETS “hello,the world!”
l逻辑常量
逻辑真为{TRUE},逻辑假为{FLASE}
Testno SETS {TURE}
汇编程序的段定义
任何一个程序都要分段,C语言一般由编译器自动分段,(分成.Text,.Data段之类),但在汇编程序这样的底层程序中,由开发者自行分段.它包含如下段
l至少一个代码段,并且代码段是只读的,对应(.Text)
l数据段可以没有,也可以有多个.
l每一个段用END结束
AREA定义一个段
AREA段名属性1,属性2,
例子:AREAInit,CODE,READONLY
lENTRY指明一个段的入口
lEND结束一个段
ABC EQU 0x12
AREA Example,CODE,READONLY
ENTRY
START MOV R7,#10
MOV R6,#5
ADD R6,R6,R7
B
END
ADS ARM汇编程序格式要求
1.所有标号要顶格写.
2.所有指令不能顶格写,一般插入Tab键在行首
3.ADS ARM中,是大小写敏感的.建议标号,指令,伪指令,寄存器名全部为大写
4.注释采用;打头
5.每个程序至少有一个AREA在代码里(READONLY)
6.每个段都要用END结束(不能顶格)
最常见几个伪指令AREA,EQU,DCB,END ,ENTRY,EXPORT,GOBEL,IMPORT,
常见伪定义
lDCB定义字符中
Str DCB “hello, world “