宏指令:类似于C语言里的宏,调用宏时通过实际的指令来代替宏体实现相关的一段代码,与 C 语言中的子函数形参和实参的调用 相似,但宏的调用与子程序的调用有本质的区别,既宏并不会节省程序的空间,其优点是简化程序代码,提高程序的可读性 以及宏内容可以同步修改。其中语句可以是指令、伪指令,甚至是已定义的宏指令。
#endif 上面表示如果定义了CONFIG_USE_IRQ(不管CONFIG_USE_IRQ的逻辑是“真”还是“假”)就汇编A段代码(不汇编B段代码),否则汇编B段代码。 另外,#if defined (x)和#ifdef (x)表示的意思一样,只是前者可以组成复杂的预编译条件,如; #if defined (A) && defined (B) #if defined (A) || VERSION > 12
3. include .include "file" 包含指定的头文件, 可以把一个汇编常量定义放在头文件中。
4. comm .comm symbol, length 在bss段申请一段命名空间,该段空间的名称叫symbol,长度为length。ld连接器在连接会为它留出空间。
5. data .data subsection 说明接下来的定义归属于subsection数据段。
7. global .global symbol .globl指示告诉汇编器,_start这个符号要被链接器用到,所以要在目标文件的符号表中标记它是一个全局符号, 链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址,所以每个汇编程序 都要提供一个_start符号并且用.globl声明。如果一个符号没有用.globl声明,就表示这个符号不会被链接器用到。
8. ascii .ascii "string" 定义一个字符串并为之分配空间.
9 long .long expressions 定义一个长整型, 并为之分配空间。就是相当于在当前位置分配空间并放置一个值。例如: _rWTCON: .long 0x15300000 就是在当前地址,即_rWTCON所代表的地址处放一个值0x15300000