ARM汇编基础

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。

原文地址:https://www.cnblogs.com/oyjngz101/p/6066426.html