Featured image of post 【经验分享】ARM常用汇编指令

【经验分享】ARM常用汇编指令

ARM常用汇编指令

ARM常用汇编指令

指令名称作用
EQU给数字常量设置一个符号名,相当于C语言中的define
AREA汇编一个新的代码段或者数据段
SPACE分配内存空间
PRESERVE8当前文件栈需要按照8字节对齐
EXPORT声明一个符号具有全局属性,可被外部文件使用
DCD以字为单位分配内存,要求4字节对齐,并要求初始化这些内存
PROC定义子程序,与ENDP成对使用,表示子程序结束
WEAK弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,即使外部文件没有定义也不出错。要注意的是,这不是ARM的指令,而是编译器的,这里要放一起只是为了方便
IMPORT声明标号来自外部文件,与C语言的EXETERN关键字类似
B跳转到一个标号
ALIGN编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,默认为4字节对齐。要注意的是,这不是ARM的指令,而是编译器的,这里要放一起只是为了方便
END到达文件的末尾,文件结束
IF,ELSE,ENDIF汇编条件分支语句,与C语言的if else类似
MRS加载特殊功能寄存器的值到特殊功能寄存器
CBZ比较,如果结果为0则转移
CBNZ比较,如果结果非0则转移
LDR从存储器中加载字到一个寄存器中
LDR[伪指令]加载一个立即数或者一个地址到一个寄存器中。
LDRH从存储器中加载半字到一个寄存器中
LDRB从存储器中加载字节到一个寄存器中
STR把一个寄存器按字节存储到存储器中
STRH把一个寄存器的低半字存储到存储器中
STRB把一个寄存器的低字节存储到存储器中
LDMIA加载多个字,并且在加载后自增基址寄存器
STMIA存储多个字,并且在存储后自增基址寄存器
ORR按位或
BX直接跳转到由寄存器给定的地址
BL跳转到标号对应的地址,并且把跳转前的下一条指令地址保存到LR
BLX跳转到由寄存器REG给出的地址,并且根据REG的LSB切换处理器模式,还要把转移前的下一条指令地址保存到LR中。ARM(LSB=0),Thumb(LSB=1)。cortex-M3只在Thumb中运行,那就必须保证reg的LSB=1,否则会报错
顺颂时祺,秋绥冬禧
Built with Hugo
Theme Stack designed by Jimmy