ARM启动文件2440init.s分析
;MACRO和MEND伪指令用于宏定义,MACRO标识开始,MEND标识结束。用MACRO和MEND定义的一段代码,称为宏定义
;体,这样在程序中就可以通过宏指令多次调用该代码段。
;伪指令格式:
;MACRO
;{$label} macroname {$parameter} {$parameter} ...
;MEND
;其中
;在一个标号前使用$表示被汇编时将使用相应的值替代$后的符号。
;macroname 所定义的宏的名称
;$parameter 宏指令的参数,当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数
;对于子程序代码较短,而需要传递的参数比较多的情况下,可以使用汇编技术。
;首先要用MACRO和MEND伪指令定义宏,包括宏定义体代码。在MACRO伪指令之后的第一行定义宏的原型,其中包
;含该宏定义的名称,及需要的参数。在汇编程序中可以通过该宏定义的名称来调用它,当源程序被汇编时,汇
;编编译器将展开每个宏调用,用宏定义体代替源程序中的宏定义的名称,并用实际的参数值代替宏定义时的形
;式参数
;-------------------------------------------------------------------------------------------------
;在arm中,用的是满递减堆栈:stmfd,ldmfd,如果用其他的方式,arm可能不能有效识别
;注意:满递减指的是在入栈时的操作方式,在出栈时则正好相反的次序
;例子:
;STMFD sp!,{R0-R7,LR}:(满递减:先减再放数值)sp根据数据个数,减小相应个数值的数据单位(一步到
;位),然后利用for循环语句,从当前sp位置,依次存储R0-R7,LR.即:sp处最后指向的是R0数据处
;LDMFD sp!,{R0-R7,LR}:复制一个变量为sp值,用该变量依次将数据存入R0-R7,LR,变量值增加,最后,变量指
;向下一个将要取的值,完成后sp获得该变量值;
;重点分析下面这个宏,它对中断处理函数的调用很重要
;确切说,这是宏函数,编译时对调用语句要做相应的展开
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
;-------------------------------------------------------------------------------------------------
;下面几个变量是ads环境下自动设置的,可以见环境配置选项里:ARM Linker->Output下,RO Base,RW Base
;IMPORT 引用变量
;-------------------------------------------------------------------------------------------------
;AREA伪指令用于定义一个代码段或数据段,一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段
;及数据段
;格式:AREA sectionname {,attr} {,attr}...
;-------------------------------------------------------------------------------------------------
;ENTRY伪指令用于指定程序的入口点
;一个程序(可以包含多个源文件)中至少要有一个ENTRY,可以有多个ENTRY,但一个源文件中最多只有一个
;ENTRY.
;-------------------------------------------------------------------------------------------------
;EXPORT声明一个符号可以被其他文件引用,相当于声明了一个全局变量。GLOBAL与EXPORT相同
;格式:EXPORT symbol{[WEAK]}
ARM启动文件2440ini 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)