03ARM寄存器组织

寄存器是什么

概念
寄存器是处理器内部的存储器,没有地址
作用
一般用于暂时存放参与运算的数据和运算结果
分类
包括通用寄存器、专用寄存器、控制寄存器

C语言中 register 关键词 定义变量

  • 快快快!就是快!
  • 不能取地址
  • 局部变量
  • 只能是整型不能浮点型

不同模式的寄存器使用

03ARM寄存器组织_第1张图片
cortex-A多了监控模式,共原本37+新增3=40个寄存器

专用寄存器

R15(PC,Program Counter)——程序计数器
用于存储当前取址指令的地址
除了会自动改变以外,还可以通过汇编去人为更改

R14(LR,Link Register)——链接寄存器
一般有以下两种用途:

  • 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址程序需要返回时将LR的值复制到PC即可实现
  • 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回

R13(SP,Stack Pointer)——栈指针
用于存储当前模式下的栈顶地址

CPSR寄存器

CPSR(Current Program Status Register),当前程序状态寄存器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0PC6aHF-1669439675257)(…/00images/当前程序状态寄存器CPSR.png)]
CPSR寄存器分为四个域

  • [31:24]为条件域用F表示
  • [23:16]为状态域用S表示
  • [15:8]为预留域用X表示
  • [8:0]为控制域用C表示

Bit[4:0] 模式位

[10000] User
[10001] FIQ
[10010] IRQ
[10011] SVC
[10111] Abort
[11011] Undef
[11111] System
[10110] Monitor

Bit[5] 状态位(默认为ARM)

[0] ARM状态
[1] Thumb状态

Bit[6] FIQ禁止位

[0]开启FIQ
[1]禁止FIQ

Bit[7] IRQ禁止位

[0]开启IRQ
[1]禁止IRQ

Bit[28] 溢出标记

当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0
当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1

Bit[29] 进位或借位扩展

当运算器中进行加法运算且产生进位时该位自动置1,否则为0
当运算器中进行减法运算且产生借位时该位自动置0,否则为1

Bit[30]

当运算器中产生了0的结果该位自动置1,否则为0

Bit[31] 负数位

当运算器中产生了负数的结果该位自动置1,否则为0

xPSR寄存器

在cortex-M3中CPSR寄存器叫做xPSR寄存器(包括APSR应用,IPSR中断,EPSR执行)。

你可能感兴趣的:(Unix环境高级编程,arm)