1. user模式不能切换到其他模式,其他特权模式可以切换到user模式。
2, I=1,禁止IRQ, F=1,禁止FIQ。芯片启动时默认禁止这两位。
3. N位:计算结果为负数时置1; Z位:计算结果为0时置为1;
C位:a.加法进位时置1 b.减法产生借位时置为0; V位:符号位改变时置1(针对有符号位)
4. spsr:对cpsr进行备份, 不能在User 和system模式下使用。
5. 7类异常源:(1)FIQ(响应速度比IRQ快) (2)IRQ[!!] (3)data abort(数据终止) (4)prefetch abort(指令预取终止)
(5)software interrupt[!!](例如用户态切换到内核态) (6)undefined instruction(指令为定义异常) (7)reset(复位)
6. 异常处理(自动处理)
(1)cpsr拷贝到spsr_<mode>
(2)设置cpsr
a)切换到ARM状态
b)进入到响应的异常模式。
c)禁止相应异常
(3)保存返回地址到LR_<mode>
(4)修改PC(在对应的异常向量表中查询)
返回(手动)
(1)从SPSR_<mode>恢复CPSR
(2)从LR_<mode>恢复PC;
7. cotex-A 同一类的中断不允许嵌套,FIQ可以嵌套IRQ(保留疑问)。
8. 伪指令:CPU不能识别,编译时替换成CPU能识别的指令。
伪操作:指导编译,不生成指令。
9. 默认状态下,数据处理指令不会影响条件码标志位,可以通过加s来影响。
9. MOV R1 ,#0xFF (mov r1 占20位,剩余12位) 立即数的本质是指令中的数。
10. 任何乘法指令都不支持立即数。
11. ASR:算术右移,低位移出,高位补符号位(没有算术左移)
12. 子函数的参数最好不要超过4个(用寄存器传参数,超过用栈来传参)
13. 跳转指令的实质是修改PC,标号的实质是地址,b指令跳转不能超过64M。