关于 ARM 寄存器的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 16:30:00
1)ARM处理器共有37个寄存器(31个通用寄存器,6个状态寄存器)
程序计数器包含在31个通用寄存器中

2)在任意处理器模式下,寄存器包含15个通用寄存器,1个或2个状态寄存器和程序计数器

如何理解这两句话???
附加问题:
通用寄存器 和 物理寄存器 是不是指同一个?

程序计数器R15(PC)
正确读取PC值后,该值位当前指令地址值加8个字节,PC指向当前指令的下两条指令的地址
请问为什么是 下两条指令的地址,不是下一条的指令地址,奇怪,不理解???

因为ARM处理器采用的是多级流水线结构,因此保存在PC的程序地址并不是当前指令地址。所以PC指向下两条指令。
通用寄存器和物理寄存器不是指同一个。物理寄存器可以通过汇编语言映射到真实存在的寄存器,比如CPSR这6个寄存器是物理寄存器却不是通用寄存器。
在这用户模式和特权模式下都需要并有且只有R15做程序指针,所以程序计数器包含在31个通用寄存器中。
在ARM状态和THUMB状态下,R0-R15这15个寄存器是通用的不变的,其中R15是PC也就是程序计数器 ,2个状态寄存器CPSR和SPSR也是在这两种模式下是通用的不变的。