常用ARM汇编指令 EQU 给数字变量取一个符号名, 相当于define AREA 汇编一个新的代码段或者数据段 SPACE 分配内存空间 PRESERVE8 当前文件栈需要8字节对齐 EXPROT 声明一个标号具有全局属性, 可被外部文件使用 DCD 以字为单位分配内存, 要求4字节对齐, 并要求初始化这些内存 PROC 定义子程序, 与ENDP成对使用, 表示子程序结束 WEAK 弱定义, 如果外部文件声明了一个标号, 则优先使用外部文件定义的标号, 如果外部文件没有定义也没有出错. 要注意的是 : 这个不是ARM的指令,是编译器的指令 IMPORT 声明标号来自外部文件, 与EXTERN关键字相似 B 跳转到一个标号 ALIGN 编译器对指令或者数据的存放进行对齐, 一般需要跟一个立即数, 缺省表示4字节对齐, 要注意 : 这不是ARM指令, 是编译器指令 END 到达文件末尾, 文件结束 IF,ELSE,ENDIF 汇编的条件分支语句 MRS 加载特殊功能寄存器的值到通用寄存器 MSR 加载通用寄存器的值到特殊寄存器 CBZ 比较, 如果结果为0就转移 CBNZ 比较, 如果结果是非0就转移 LDR 从储存器加载字到一个寄存器中 LDR[伪指令] 加载一个立即数或者一个地址值到一个寄存器. 举例 : LDR Rd, = label, 如果label是一个立即数, 那么Rd就是立即数, 如果label是一个标识符, 如指针, 那么存到Rd的就是label这个标识符的地址 LDRH 从储存器加载半字到一个寄存器 LDRL 从储存器加载一个字节到寄存器 STR 把一个寄存器按字存储到储存器 STRH 把一个寄存器的低半字存储到储存器 STRB 把一个寄存器的低字节存储到储存器 LDMIA 将多个字从储存器加载到CPU寄存器, 先操作, 指针再递增 STMDB 将多个字从CPU寄存器加载到储存器, 指针先递减, 再操作 LDMFD ORR 按位或 BX 直接跳转到由寄存器给定的地址 BL 跳转到标号对应的地址, 并且把跳转之前的下条指令地址保存到LR BLX 跳转到由寄存器REG给出的地址, 并根据REG的LSB切换处理器状态, 还要把转移前的下一条指令地址保存到LR