ARM体系结构——ARM寄存器组织

ARM处理器寄存器

寄存器的概念

寄存器是处理器内部的存储器,没有地址。

寄存器的作用

一般用于暂时存放参与运算的数据和运算结果。

寄存器分类

包括通用寄存器、专用寄存器、控制寄存器。


 

寄存器与工作模式

不同的工作模式下,能使用的寄存器是不一样的。即在某个特点的模式下只能使用当前模式下的寄存器。

*注:其中cortex-A9增加了Secure Monitor模式。


 

专用寄存器

R15(PC, Program Counter)

程序计数器,用于存储当前取址指令的地址。

R14(LR, Link Register)

链接寄存器,一般有以下两种用途:

  • 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址程序需要返回时将LR的值复制到PC即可实现。

    比如在main函数执行到第n条指令,该指令是是调用func函数,

    此时PC会跳到func函数的地址去取指令,与此同时,n+1会存储在LR中。

    当func结束的时候,LR赋值到PC,那么就回到main函数,并从n+1条指令继续。

  •  产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回。

如图:

R13(SP, Stack Pointer)

栈指针寄存器,用于存储当前模式下的栈顶指针。

CPSR(Current Program Status Register)

当前程序状态寄存器。

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
1111 System
10110 Monitor


状态位:Bit[5]

0 ARM状态
1 Thumb状态


FIQ禁止位:Bit[6]

0 开启FIQ
1 关闭FIQ

IRQ禁止位:Bit[7]

0 开启IRQ
1 关闭IRQ

溢出标志位:Bit[28]

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

进位或错位扩展位:Bit[29]

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

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

零判断位:Bit[30]

0 当运算器中没有产生0的结果
1 当运算器中产生了0的结果,该位自动置1

负或小于判断位:Bit[31]

0 当运算器中没有产生负数
1 当运算器中产生了负数的结果该位自动置1

 

 

 

 

END


 

posted @ 2022-04-14 23:09  zj城城城城  阅读(348)  评论(0编辑  收藏  举报