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