一、ARM指令集
1、移位
算术右移 (ASR):针对于有符号数, 最高位补符号位,需要考虑这个数值的符号位
逻辑右移 (LSR):针对于无符号数 ,最高位补0,不需要考虑这个数值的符号位
循环右移(ROR): 循环将移出的最低位补到最高位
2、mov

3、ldr
功能1:向寄存器中加载非立即数
功能2:将RAM中的数据加载到寄存器


4、str
将寄存器中的数据写入RAM指定空间中
5、bic
将寄存器中的值某几位清零(取决于立即数哪几位为1)

6、orr
将寄存器中的值某几位值1(取决于立即数哪几位为1)

7、S
NZCV位配合c位在有条件的情况下执行某些指令


8、b
无条件跳转
bl:函数调用时,会将返回地址保存到lr寄存器
b:函数调用时,无法将返回地址保存到lr寄存器
bx:跳转到lr寄存器对应返回地址

9、mrs
读取某个特殊寄存器的值到通用寄存器
10、msr
将某个通用寄存器的值写入到特殊寄存器
二、
1、栈的分类
空增栈
空减栈
满增栈
满减栈
增栈:入栈时,sp指针向上移动
减栈:入栈时,sp指针向下移动
空栈:先写数据再挪动指针
满栈:先挪动指针,再写数据
ARM内核使用的是满减栈:*--sp,先让sp--,再写数据
2、汇编调用C语言传参时
(1)如果参数少于或等于4个时,可以通过通用寄存器R0 - R3进行传参
(2)当参数超过4个时,必须通过栈进行传参(入栈 保护 出栈恢复)
(3)C语言函数返回的结果保存到R0寄存器




在c语言中调用汇编语言实现找最小值




3、修改工作模式
(1)将cpsr寄存器中的值读到通用寄存器中R0
(2)将R0寄存器中低5位的值先清0 (bic)
(3)将R0寄存器中的低5位置设置为:10000(orr)
(4)将R0寄存器中的值回写到CPSR寄存器
4、立即数判断的规则
(1)如果某个数的数值范围是0~0xFF之间,那么这个数一定是立即数;
(2)把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;
(3)这个数的二进制序列凑够8位之后的的右边必须为偶数个连续的 0