(续接上篇)
1.7 立即数
立即数:直接写在指令里的数值,不需要从寄存器、内存里读取。
判断规则:
- 数值范围0~0xFF(一定是);
- 二进制最高位1与最低位1之间位数不超过8位;
- 二进制序列凑够8位后右边偶数个0。
2. 汇编指令
2.1 指令
2.1.1 ldr & str
ldr
- 功能1:向寄存器中加载非立即数
- 功能2:将RAM中的数据加载到寄存器
str
- 功能:将寄存器中的数据写入RAM指定空间中
2.1.2 bic & orr
bic: 将寄存器中的值某几位清零(取决于立即数哪几位为1)
orr:将寄存器中的值某几位值1(取决于立即数哪几位为1)
2.1.3 b指令
无条件跳转
- bl:函数调用时,会将返回地址保存到lr寄存器
- b:函数调用时,无法将返回地址保存到lr寄存器
- bx:跳转到lr寄存器对应返回地址
汇编调用C语言传参时:
- 如果参数少于或等于4个时,可以通过通用寄存器R0 - R3进行传参
- 当参数超过4个时,必须通过栈进行传参(入栈保护 出栈恢复)
- C语言函数返回的结果保存到R0寄存器

2.1.4 cpsr寄存器操作
-
将cpsr寄存器中的值读到通用寄存器中R0
-
将R0寄存器中低5位的值先清0 bic
-
将R0寄存器中的低5位置设置为:10000 orr
-
将R0寄存器中的值回写到CPSR寄存器
2.1.5 mrs & msr
mrs指令:读取某个特殊寄存器的值到通用寄存器
msr指令:将某个通用寄存器的值写入到特殊寄存器
2.2 栈的分类
满减栈(ARM默认使用)、空减栈、满增栈、空增栈
- 减栈:入栈时sp向下移动,地址变小;
- 增栈:入栈时sp向上移动,地址变大;
- 满栈:sp指向栈顶有效数据;
- 空栈:sp指向栈顶下一个空位置。