Skip to content
On this page

ARM汇编_ARMv7特殊功能寄存器


标签:ARM32汇编/基础  

R13(SP)

  • R13 又叫做 SP (stack pointer):栈指针寄存器
  • 当前 SP 寄存器中始终存放的是栈顶元素的地址,栈区一般存放一些临时变量

R14(LR)

  • R14 又被称作 LR (link register),这个寄存器在现实程序跳转时用于保存程序的返回地址
  • 即当程序跳转时 CPU 会自动将当前指令的下一条指令的地址保存到 LR 寄存器中,程序返回时将 LR 寄存器的数值赋值给 PC 就可以实现程序的返回

R15(PC)

  • R15 又被称为 PC 寄存器(程序计数器),这个寄存器中保存的是即将执行的指令地址
  • PC 寄存器保存的地址中的指令执行完毕后 PC 的数值会自动向下 +4
  • 如果有特殊需要的时候可以手动修改 PC 的值

CPSR 和 SPSR

  • CPSR:current program stated register,当前程序状态寄存器:保存的是当前程序的运行状态(比如工作模式)
  • SPSR:saved program stated register,保存程序状态寄存器:主要用户保存当前程序状态寄存器的
  • 有专用的指令修改程序状态寄存器msrmrs

invert

上图是寄存器每一位上的用途:

  1. N[31]:指令运行结果为负数时,N 位被自动置 1,否则为 0,例如 100-200
  2. Z[30]:指令的运行结果为零是,Z 位被自动置 1,否则为 0,例如 100-100
  3. C[29]
    • 加法:加法运算如果产生进位,C 位被置 1,否则为 0(32位指令,低32位向高32位进位)
    • 减法:减法运算如果产生借位,C 位被自动清 0,否则置 1(32位指令,低32位向高32位借位)
  4. V[28]:符号位发生变化,V 位被自动置 1,否则请 0
  5. I[7]: IRQ 中断屏蔽位
    • I = 0 : 不屏蔽 IRQ 中断
    • I = 1 : 屏蔽 IRQ 中断
  6. F[6]: FIQ 中断屏蔽位
    • F = 0 : 不屏蔽 FIQ 中断
    • F = 1 : 屏蔽 FIQ 中断
  7. T[5]: 状态位
    • T = 0 : 表示ARM状态,执行的是ARM指令集
    • T = 1 : 表示Thumb状态,执行的是Thumb指令集
    • ARM指令集 : 一条汇编指令编译生成32位的机器码
    • thumb指令集:一条汇编指令编译生成16位的机器码
    • ARM指令集的代码的密度低,而thumb指令记得代码密度高。
    • ARM指令集的功能性要高于Thumb指令集。
  8. M[4:0]: 模式位
    • 10000 User mode;
    • 10001 FIQ mode;
    • 10010 IRQ
    • 10011 SVC mode;
    • 10111 Abort mode;
    • 11011 Undfined mode;
    • 11111 System mode;
    • 10110 Monitor mode;

Last updated: