(1).global
.global _start @ 给_start外部链接属性
(2).section
.section .text @ .section用来指定段的,此句指定当前段为代码段
(3).ascii 或.byte或 .short或 .long或 .word 或.quad或 .float或 .string
定义数据。
(4).align
.align 4 @ 以16字节对齐,表示2^4=16字节对齐
(5).balignl
.balignl 16 0xabcdefgh @ 整句代码表示16字节对齐填充@ b表示位填充,align表示对齐,l表示以4字节为单位填充@ 16表示16字节对齐,后面数字是填充原料
(6).equ
这类似于C中宏定义。
(7).end
表示文件结束。
(8).include
表示头文件包含。
(9).arm / .code32
声明以下指令为arm指令。
(10).thumb / .code16
声明以下为thubm指令。
(11)ldr伪指令
ldr可以作为加载指令,也可以作伪指令。它们的区别在于操作数前是“=”还是“#”。
ldr当做加载指令时,使用“#”,比如:ldr r0,#0xff
ldr当做伪指令时,使用“=”,比如:ldr r0,=0xff
ldr伪指令的格式:ldr rn,=expr
代码示例:
COUNT EQU 0x40003100 ;COUNT是我们定义的一个变量,地址为0x40003100。
LDR R1,=COUNT ;将COUNT这个变量的地址,也就是0x40003100放到R1中。
MOV R0,#0 ;将立即数0放到R0中。STR R0,[R1] ;将R0中的值放到以R1中的值为地址的存储单元去。;实际就是将0放到地址为0x40003100的存储单元中去。
//这三条指令是为了完成对变量COUNT赋值。
//用三条指令来完成对一个变量的赋值,跟ARM的采用RISC有关。