日期:2014-05-16 浏览次数:20980 次
以下分析及总结结果并未进行运行确认。
?
任何汇编行都是如下结构: [:] [} @ comment [:] [} @ 注释 Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。 标号只能由a~z,A~Z,0~9,“.”,_等字符组成。当标号为0~9的数字时为局部标号,局部标号可以重复出现,使用方法如下: 标号f: 在引用的地方向前的标号 标号b: 在引用的地方向后的标号 .section伪操作 用户可以通过.section伪操作来自定义一个段,格式如下: .section section_name [, "flags"[, %type[,flag_specific_arguments]]] 每一个段以段名为开始, 以下一个段名或者文件结尾为结束。这些段都有缺省的标志(flags),连接器可以识别这些标志。(与armasm中的AREA相同)。 下面是ELF格式允许的段标志 含义 a 允许段 w 可写段 x 执行段 Linux汇编程序中的宏定义 格式如下: .macro 宏名 参数名列表 @伪指令.macro定义一个宏 宏体 .endm @.endm表示宏结束 如果宏使用参数,那么在宏体中使用该参数时添加前缀“/”。宏定义时的参数还可以使用默认值。 可以使用.exitm伪指令来退出宏。
?
寄存器规范:
r0,r1,r2,r3 四个寄存器在函数调用时不保证保存,需要程序员在调用前进行保存。因为这四个寄存器将被用于函数调用的前四个参数(32bits,如果64bits则会占用两个)保存。函数调用返回时会暂存使用。 r4~r11: 变量寄存器 r9: sb 静态基址 r10: sl 堆栈限制 r11: fp 帧指针 r12: ip 过程调用中间临时寄存器 r13: sp 堆栈指针 r14: lr 链接寄存器 r15: pc 程序计数器