ARM 汇编指令集 (学习笔记整理)
变量类型
- 全局和静态变量保留在 RAM 里,需要使用 loads/stores 访问外部存储器 - 很慢
- 局部变量通常放在寄存器中,用来快速高效处理。(如果编译器的寄存器分配算法认为超过现有的寄存器数量,将把变量压入栈中)
- 对局部变量,用 word-size(int) 代替halfword 和 byte: 为了确保不受其他条件影响,可特别指定使用 32 bit 寄存器变量。
数据处理指令
- 算术指令
- ADD 加法 ADD R1 R2 R3 //R1 = R2+R3
- ADC 带进位加法
- SUB 减法
- SBC 带借位减法
- RSB 逆向减法
- RSC 带位逆向减法指令
- 逻辑指令
- AND 按位与
- ORR 按位或
- EOR 逻辑异或操作指令
- BIC 按位清零
- 比较指令
- CMP 比较指令 (CMP指令就是从寄存器中减去表示的数值,根据操作的结果更新CPSR中的条件标志位,该更新是默认更新,无需是否添加"S"。)
- CMN 基于相反数的比较指令 (CMN指令是指将寄存器中的值加上表示的数值,根据操作的结果更新CPSR中的条件标志位,该更新是默认更新,无需是否添加"S"。)
- TST 位测试指令 (TST指令通常用于测试寄存器中某些位是1还是0,一般会与BEQ或者BNE指令配合使用完成条件判断跳转功能。)
- TEQ 相等测试指令 (TEQ指令通常用来判断两个数是否相等,但这种比较操作不会影响到CPSR寄存器中的V位跟C位;同时,TEQ指令也可用于比较操作数符合是否相同,该指令执行后,CPSR寄存器中的N位位两个操作数符号位做异或的结果。)
- 数据搬移
- MOV 数据传输指令 MOV R1, R2 // R1 = R2
- MVN 数据求反传送指令 MVN R1, R2 // R1=~R2
上述指令只能对寄存器操作,不能针对存储器