什么arm核arm 核有多少个寄存器器可以存储pc和lrarm 核有多少个寄存器器

一个迷途的小小程序猿
arm寄存器之r14,r15
最近在学习ARM,发现多出一个R14寄存器(LR:返回连接寄存器),不是有PC指针寄存器(R15)了吗,怎么还需要这个呢?
于是在网上查找各种资料,发现了其中的秘密:
先看定义:
(1)PC是程序计数器,存储将要执行的指令地址
(2)LR是链接寄存器,是ARM处理器中一个有特殊用途的寄存器,当调用函数时,返回地址即PC的值被保存到LR中(mov
(3)IR是指令寄存器,用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中,然后再传送至IR。
(1)IR是微体系结构概念(什么是微体系结构?就是程序员看不到,但硬件中确实存在的硬件逻辑,只有系统设计者知道其存在。),而LR是程序员可见的寄存器。比如用gdb调试程序时,如果打印LR寄存器内容是可以看到其值的,但是打印IR是不可能的。
(2)LR是PC的备份,PC寄存器存的是将要执行的指令的地址;IR存的是将要送到ALU等部件执行的指令内容。
异常的发生会导致程序正常运行的被打断,并将控制流转移到相应的异常处理(异常响应),有些异常(fiq、irq)事件处理后,系统还希望能回到当初异常发生时被打断的源程序
断点处继续完成源程序的执行(异常返回),这就需要一种解决方案,用于记录源程序的断
点位置,以便正确的异常返回。
类似的还有子程序的调用和返回。在主程序中(通过子程序调用指令)调用子程序时,
也需要记录下主程序中的调用点位置,以便将来的子程序的返回。
在ARM处理器中使用 R14实现对断点和调用点的记录,即使用R14用作返回连接寄存器(LR )。在硬件上和指令执行上,CPU 自动完成相应返回点的记录。在ARM 汇编语言程序设计时,R14和LR通用。
ARM处理器相应异常时,会自动完成将当前的PC保存到LR寄存器。
ARM处理器执行子程序调用指令(BL )时,会自动完成将当前的PC的值减去4的结果数据保存到LR寄存器。即将调用指令的下紧邻指令的地址保存到LR。
ARM处理器针对不同的模式,共有6个链接寄存器资源(LR ),其中用户模式和系统
模式共用一个 LR,每种异常模式都有各自专用的R14 寄存器(LR )。这些链接寄存器分别
为 R14、R14_svc、R14_abt、R14_und、R14_irq、R14_fiq,
程序设计者要清晰处理器的模式与相应寄存器的对应关系,都是使用 R14,但不同模式下的R14 不是同一个物理资源,其内容可能天壤之别。
R14 不用做链接寄存器(LR )时,也可以用做通用数据寄存器。
接下来我们讨论下,为什么PC指针不是每次都加1,而是加上一个固定的常数,此常数跟芯片内核架构有关。
冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC
决定了程序运行流向。故而,程序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU
按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC
的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC
的过程通常只是简单的对PC 加“指令字节数”。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。
ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度(下述标记为R15[31:0],表示R15 的‘第31位’到‘第0位'),ARM 处理器可以直接寻址4GB 的地址空间(2^32 = 4G )。
(解释什么是字对齐什么是半字对齐)存储器是计算机中用于记忆数据信息的电子装置,它通过记忆“高/低”电平记忆“1/0”能记忆 1 位“1/0”数据的电子单元,称之为存储元,计算机中的存储器通常将每8 个这样的存储元组成一个单元,称之为字节,字节是处理器访问存储器的最小单位。ARM 处理器对存储器空间的访问分辨率以字节为最小单位;ARM 处理器还支持 16bit 数据(2 字节)的存储器访问和 32bit数据(4
子节)的存储器访问。在ARM 中将32 位的数据称之为‘字’,将 16 位的数据称之为‘半字’。
ARM 处理器在对于“字”/ “半字”数据进行访问时,对数据的存储格式是有要求的。要求被访问的“半字”必须存放在存储器紧邻的两个字节单元,并且首字节地址必须能被2整除,这样存储的 16bit 数据称为 ‘半字对齐’存储数据,16bit 数据这样的存储方式称为 ‘半字对齐’存储。类似的,ARM 处理器在进“字”数据访问时,要求被访问的“字”必须 存放在存储器紧邻的4 个字节单元,并且首字节地址必须能被4 整除,这样存储的32bit 数 据称为‘字对齐’存储数据,32bit
数据这样的存储方式称为‘字对齐’存储。
能被2 整除数据的二进制表示,其最低位一定是‘0’;能被4 整除数据的二进制表示,
其最低两位一定是‘00’。ARM 体系要求32 位长的ARM 指令在存储器中必须字对齐存储,
16 位长的 Thumb 指令必须半字对齐存储。因此,在ARM 状态下,R15
的值总是能被4 整
除,也就是R15 寄存器的最低2 位总是 0;Thumb 状态下,R15 的值总是能被2 整除,也就是R15 寄存器的最低位总是0。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Android驱动海洋里的小鲸鲨
深入理解SP、LR和PC
深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。
PC 代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指(从存储器装载一条指令);2.译码(识别将要被执行的指令);3.执行(处理 指令并将结果写回寄存器)。而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定 将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址
加8字节的地址,即:PC值=当前程序执行位置+8;
ARM指令是三级流水线,取指,译指,执行时同时执行的,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态 下,一个指令占4个字节),cpu正在执行的指令地址是PC-8,也就是说PC所指向的地址和现在所执行的指令地址相差8。
当突然发生中断的时候,保存的是PC的地址
这样你就知道了,如果返回的时候返回PC,那么中间就有一个指令没有执行,所以用SUB pc lr-irq #4。
1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。
2、连接寄存器r14(LR):每种模式下r14都有自身版组,它有两个特殊功能。
(1)保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回,通常用下列指令之一:
MOV PC, LR
通常子程序这样写,保证了子程序中还可以调用子程序。
stmfd sp!, {lr}
ldmfd sp!, {pc}
(2)当异常发生时,异常模式的r14用来保存异常返回地址,将r14如栈可以处理嵌套中断。
3、程序计数器r15(PC):PC是有读写限制的。当没有超过读取限制的时候,读取的值是指令的地址加上8个字节,由于ARM指令总是以字对齐的,故bit[1:0]总是00。当用str或stm存储PC的时候,偏移量有可能是8或12等其它值。在V3及以下版本中,写入bit[1:0]的值将被忽略,而在V4及以上版本写入r15的bit[1:0]必须为00,否则后果不可预测。
ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。
转载自网络
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!每一个在坚持的人,请加油!请相信,越努力,越幸运! 我相信,我们是不相识的战友!...
ARM 常见问题
1.ARM: Advanced RISC Machine 高级精简指令集计算机
2.RISC: Reduce Instruction set Computer 精简指令集,周期执行等长,固定指令长度
3.哈佛与冯诺依谩的区别:
CPU在一个周期内能否同时操作数据和指令instruction cache 和data cache分开为哈佛结构,没有分开为冯诺依谩结构
Note: ARM7三级流水线冯诺依谩结构 ARM9五级流水线哈佛结构
4.ARM特点: 低功耗、移动手持设备
5.编程模型: ARM 32位架构指的是数据总线&----&字
6.工作模式: 7种工作模式
usr 非特权模式|------------------|空间共用
FIQ 快速中断模式|
IRQ 外部中断模式|
abort 异常模式 |异常模式
undef 未定义模式 |
supervisor 管理模式 |
7.寄存器: R13:SP栈指针。R14:LR 链接返回。R15:PC 程序计数器
8.ARM有37个32位长的寄存器
1个 R15 PC(Program counter)
CPSR(Current program status register)
SPSR(saved program status register)
30个通用寄存器
R0-R12:五种模式公有 除FIQ(usr 和system算一种)13个|
FIQ:私有寄存器R8-R12
5个 |30个通用寄存器
R13:R14:六种模式都是私有的
PC :公有 1个
状态寄存器:CPSR 公有1个
SPSR 私有5个(usr没有)
Note:(Crotex A
中monitor又多3个,一共是40个)
9.CPSR 当前程序状态寄存器 current program status register可以在任何处理器模式下被访问
1)ALU (atithmetic logic unit,算术逻辑单元)状态标志的备份
2)当前处理器的模式
3)中断全能标志
4)设置处理器的状态(只有在4T架构)
10.CPSR复位后 进入supervisor模式,ARM状态
11.ARM状态32位4字节对齐,特点最后两位无效为0.PC的bit[1:0]=0
12.当异常产生时:
1)系统会拷贝CPSR到SPSR,设置CPSR状态
2)返回由程序员恢复SPSR--&CPSR
13.ARMv4所有指令都是条件执行。ARMv5有一条BX非条件执行
14.Thumb代码比ARM代码的优势
1)代码密码是ARM的65%
2)方便窄内存操作
15.DMIPS: 一秒种执行的速度.CPI:指令执行的百分率周期/指令
16.指令流水线结论:
1)Execute Address=PC-8
2)IRQ的lr=PC-4.
BL、undef:lr=PC
3)LDR互锁条件:LDR的目的地址在下一周期的源地址出现
LDM(多内存操作)的条件:最后一个寄存器在一个周期作为源地址使用
17.ARM9E: E支持DSP。ARM9TDMI:支持调试,IDE
18.在流水线的第二阶段 译码decode读寄存器
----------------------------------------------------------------------------------
1.说出ARM可以工作的模式名字
usr 用户模式
FIQ 快速中断模式
IRQ 外部中断模式
Abort 异常模式
undef 未定义模式
svc 管理模式
2.ARM核有多少个寄存器
答:37个32位的寄存器
3.什么寄存器用于存储PC和LR寄存器
答:PC:R15。LR:P14
4.R13通常用来存储什么
答:栈指针
5.哪种模式使用的寄存器最少
6.在Thumb指令中,哪些处理器处于Low group
7.CPSR的哪一位反映了处理器的状态
8.所有Thumb指令采取什么对齐方式
答:16位2字节对齐
9.ARM有哪几个异常类型 答:7个
Undefined instruction 未定义异常 0x04
Software interrupt 软中断
Prefetch Abort
预取指异常 0x0c
Data Abort
数据异常 0x10
外部中断异常 0x18
快速中断异常 0x1c
10.为什么FIQ的服务程序地址要位于0x1c
答:因为0x1c后面可以直接给异常处理函数,而不需跳转,FIQ还有额外的5个私有寄存器,不需对齐进行保护(中断处理时,必须保护期使用的非私有寄存器)从而提高执行速度如果在0x1c前面的话则只有四个字节只能跳转执行异常函数
11.在复位后,ARM处理处于何种模式、何种状态
答:处理ARM状态,svc模式
12.哪些ARM指令可以有条件的执行
答:在ARMv4架构下所有的指令都是可以有条件执行,但是在ARMv5架构下有一条指令BX不能有条件执行,是非条件执行
13.Thumb代码与ARM代码比较的两在优势 答:优化代码密码、提高窄内存操作性能、是ARM指令集的一个功能子集
14.AMBA代表是什么
答:advanced mircontrol bus architecture 高级微控制总线体系结构
AHB:高速总线。APB:低速总线
扫码向博主提问
非学,无以致疑;非问,无以广识
擅长领域:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!ARM常见问题【踩叶轻飞吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5贴子:
ARM常见问题
ARM 常见问题1.ARM: Advanced RISC Machine 高级精简指令集计算机2.RISC: Reduce Instruction set Computer 精简指令集,周期执行等长,固定指令长度3.哈佛与冯诺依谩的区别:
CPU在一个周期内能否同时操作数据和指令instruction cache 和data cache分开为哈佛结构,没有分开为冯诺依谩结构
Note: ARM7三级流水线冯诺依谩结构 ARM9五级流水线哈佛结构 4.ARM特点: 低功耗、移动手持设备 5.编程模型: ARM 32位架构指的是数据总线&----&字 6.工作模式: 7种工作模式
usr 非特权模式|------------------|空间共用
FIQ 快速中断模式|
IRQ 外部中断模式|
abort 异常模式 |异常模式
undef 未定义模式 |
supervisor 管理模式 |7.寄存器: R13:SP栈指针。R14:LR 链接返回。R15:PC 程序计数器 8.ARM有37个32位长的寄存器
1个 R15 PC(Program counter)
CPSR(Current program status register)
SPSR(saved program status register)
30个通用寄存器
R0-R12:五种模式公有 除FIQ(usr 和system算一种)13个|
FIQ:私有寄存器R8-R12
5个 |30个通用寄存器
R13:R14:六种模式都是私有的
PC :公有 1个
状态寄存器:CPSR 公有1个
SPSR 私有5个(usr没有)
Note:(Crotex A
中monitor又多3个,一共是40个) 9.CPSR 当前程序状态寄存器 current program status register可以在任何处理器模式下被访问
1)ALU (atithmetic logic unit,算术逻辑单元)状态标志的备份
2)当前处理器的模式
3)中断全能标志
4)设置处理器的状态(只有在4T架构) 10.CPSR复位后 进入supervisor模式,ARM状态11.ARM状态32位4字节对齐,特点最后两位无效为0.PC的bit[1:0]=0 12.当异常产生时:
1)系统会拷贝CPSR到SPSR,设置CPSR状态
2)返回由程序员恢复SPSR--&CPSR13.ARMv4所有指令都是条件执行。ARMv5有一条BX非条件执行14.Thumb代码比ARM代码的优势
1)代码密码是ARM的65%
2)方便窄内存操作15.DMIPS: 一秒种执行的速度.CPI:指令执行的百分率周期/指令16.指令流水线结论:
1)Execute Address=PC-8
2)IRQ的lr=PC-4.
BL、undef:lr=PC
3)LDR互锁条件:LDR的目的地址在下一周期的源地址出现
LDM(多内存操作)的条件:最后一个寄存器在一个周期作为源地址使用17.ARM9E: E支持DSP。ARM9TDMI:支持调试,IDE18.在流水线的第二阶段 译码decode读寄存器---------------------------------------------------------------------------------- 测试:1.说出ARM可以工作的模式名字答:7种:usr 用户模式 system
系统模式 FIQ 快速中断模式 IRQ 外部中断模式 Abort 异常模式 undef 未定义模式 svc 管理模式2.ARM核有多少个寄存器答:37个32位的寄存器3.什么寄存器用于存储PC和LR寄存器
答:PC:R15。LR:P144.R13通常用来存储什么
答:栈指针5.哪种模式使用的寄存器最少
答:usr6.在Thumb指令中,哪些处理器处于Low group
答:R0-R77.CPSR的哪一位反映了处理器的状态
答:T8.所有Thumb指令采取什么对齐方式
答:16位2字节对齐9.ARM有哪几个异常类型 答:7个 Reset
0x00 Undefined instruction 未定义异常 0x04 Software interrupt 软中断
0x08 Prefetch Abort
预取指异常 0x0c Data Abort
数据异常 0x10 IRQ
外部中断异常 0x18 FIQ
快速中断异常 0x1c10.为什么FIQ的服务程序地址要位于0x1c 答:因为0x1c后面可以直接给异常处理函数,而不需跳转,FIQ还有额外的5个私有寄存器,不需对齐进行保护(中断处理时,必须保护期使用的非私有寄存器)从而提高执行速度如果在0x1c前面的话则只有四个字节只能跳转执行异常函数11.在复位后,ARM处理处于何种模式、何种状态
答:处理ARM状态,svc模式12.哪些ARM指令可以有条件的执行
答:在ARMv4架构下所有的指令都是可以有条件执行,但是在ARMv5架构下有一条指令BX不能有条件执行,是非条件执行13.Thumb代码与ARM代码比较的两在优势 答:优化代码密码、提高窄内存操作性能、是ARM指令集的一个功能子集14.AMBA代表是什么
答:advanced mircontrol bus architecture 高级微控制总线体系结构 AHB:先进的高速总线。APB:先进的外设总线
当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位源会改变这个内核信号),ARM7TDMI处理器放弃正在执行的指令。在复位后,除PC和CPSR之外的所有寄存器的值都不确定。
当nRESET信号再次变为高电平时,ARM处理器执行下列操作:
1.强制M[4:0]变为b10011(管理模式);
2.置位CPSR中的I和F位;
3.清零CPSR中的T位;
4.强制PC从地址0x00开始对下一条指令进行取指;
5.返回到ARM状态并恢复执行 。
贴吧热议榜
使用签名档&&
保存至快速回贴ARM Pc寄存器的一个问题
[问题点数:20分,结帖人slhkzyl]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:13456
2014年9月 C/C++大版内专家分月排行榜第二2010年6月 Linux/Unix社区大版内专家分月排行榜第二
2010年7月 Linux/Unix社区大版内专家分月排行榜第三
本版专家分:13456
2014年9月 C/C++大版内专家分月排行榜第二2010年6月 Linux/Unix社区大版内专家分月排行榜第二
2010年7月 Linux/Unix社区大版内专家分月排行榜第三
本版专家分:13456
2014年9月 C/C++大版内专家分月排行榜第二2010年6月 Linux/Unix社区大版内专家分月排行榜第二
2010年7月 Linux/Unix社区大版内专家分月排行榜第三
本版专家分:185
本版专家分:0
结帖率 100%
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐}

我要回帖

更多关于 arm寄存器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信