1、ARM核的寄存器组织
1.1 寄存器概念介绍
控制器:控制程序运行,进行取指令操作,并将指令给到对应的运算器执行指令。
运算器:执行汇编指令,执行指令需要的使用的数据来源于寄存器,并将执行的执行结果返回到寄存器中。
存储器:又名寄存器,用来进行数据存储。
1.2 ARM-v7架构的arm内核的寄存器组织
- 寄存器组织图中,每个小方块就是一个寄存器,每个寄存器都是32位。
- 寄存器没有地址,访问寄存器是通过编号进行访问的,R0-R15,cpsr,spsr.
- 每种工作模式只能访问自己模式下的对应的寄存器,不可以访问其他模式下的寄存器。
- banked类型的寄存器表示私有的寄存器,非banked类型的寄存器表示公有的寄存器。
- 如果工作模式下具有私有的寄存器就不可以访问对应编号的公有的寄存器, 如果工作模式下没有私有的寄存器才可以访问公有的寄存器。 和上图的图2进行对照理解。
- user模式和sys模式共用一套寄存器组织
- user模式和sys模式下,最多访问17个寄存器 fiq,irq,svc,abort,undef,monitor模式最多访问18个寄存器, hyp模式最多访问19个寄存器。
1.3 寄存器为什么没有地址
add r0, r0, r1 —> 功能:加法指令 R0 = R0 + r1 | 编译器将其编译生成32位的机器码
机器码中需要包含add的信息,r0寄存器的信息,r1寄存器的信息。 如果寄存器存在地址,那么32位的机器码中无法存储32位的地址信息
因此寄存器是没有地址的,通过编号找到对应的寄存器。
1.4 ARM-v8架构的arm内核的寄存器组织
1.5 ARM-v7架构和ARM-v8架构的区别
区别1:
arm-v7架构支持的是32位的汇编指令集
arm-v8架构支持的是64位的汇编指令集,向下兼容arm-v7架构
区别2:
arm-v7架构主要使用的是32位的寄存器
arm-v8架构主要使用的是64位的寄存器,也有32位的寄存器
区别3:
arm-v7架构执行一条指令可以完成32位数据的处理,使用的是32位的寄存器
arm-v8架构执行一条指令可以完成64位数据的处理,使用的是64位的寄存器
相同点:
arm-v7架构的汇编指令集编译生成32位的机器码
arm-v8架构的汇编指令集编译生成的也可能是32位的机器码
2、特殊的寄存器
2.1 R13寄存器
R13 ----> 别名:sp(the Stack Register:栈指针寄存器) 作用:栈指针寄存器中存放的是栈空间的地址。
C语言的运行必须有对应的栈空间,用来压栈保存现场和出栈恢复现场。 及运行C程序必须先初始化栈空间。
2.2 R14寄存器
R14 ----> 别名:LR (the Linking Register:链接寄存器) 作用:链接寄存器用来保存返回地址
2.3 R15寄存器
R15 ----> 别名:PC(the Program Counter:程序计数寄存器) PC寄存器中存放的是当前取指指令的地址。
2.4 cpsr寄存器
cpsr : current program statued Register(当前程序状态寄存器)
作用:cpsr中存放的是当前程序的运行状态,比如处理器的工作模式。
2.5 spsr寄存器
spsr : saved program statued Register(保存程序状态寄存器)
作用:保存当前程序状态寄存器的,对cpsr寄存器进行备份。
3、cpsr寄存器的详解
重点掌握cpsr的高4位和低8位的含意及作用?
N[31] : 指令的运行结果为负数时,N位被自动置1,否则清0. Z[30] : 指令的运行结果为零时,Z位被自动置1,否则清0.
C[29] : 加法:产生进位(溢出),C位被自动置1,否则清0. 减法:产生借位(溢出),C位被自动清0,否则置1.
32位的处理器,一条汇编指令本身就可以完成32位以内数据的运算, 因此32位以内的数据是没有进位后者借位说法。
进位:低32位向高32位进位,(低32为存不下,数据溢出) 借位:低32为向高32为借位,(结果为负数) V[28] :
符号位发送变化,V位自动置1,否则清0.I[7] : IRQ中断屏蔽位 I = 0 : 不屏蔽IRQ类型的中断 I = 1 : 屏蔽IRQ类型的中断 F[6] :
FIQ中断屏蔽位 F = 0 : 不屏蔽FIQ类型的中断 F = 1 : 屏蔽FIQ类型的中断 T[5] : 状态位 T = 0 :
ARM状态,执行ARM指令集,ARM指令的宽度是32位; T = 1 :
Thumb状态,执行Thumb指令集,Thumb指令的宽度是16位。 M[4:0] : 模式位 10000 User mode;
10001 FIQ mode;
10011 SVC mode;
10111 Abort mode;
11011 Undef mode;
11111 System mode;
10110 Monitor mode;
10010 IRQ mode;
其他的值保留不使用
4、三级流水线
ARM处理器的指令执行采用流水线的方式,提高指令的执行的效率。
重点理解3级流水线即可,5级流水线,7级流水线,8级流水线,13级流水线知道即可, 多级流水线都是再3级流水线的基础之上进行扩展。学习汇编指令重点从宏观上理解每条指令执行之后的功能即可,不需要对指令进行细分。
取指器:取指器根据PC寄存器中的指令的地址完成取指的操作,交给译码器对指令进行译码; 译码器:对指令进行翻译,交给对应的执行器执行指令;
执行器:执行汇编指令并将结果写回到寄存器。以上三个器件都属于单周期(之间相互独立,工作互不干扰)的器件,完成一次操作需要一个时钟周期。文章来源:https://www.toymoban.com/news/detail-621037.html
指令1 | 指令2 | 指令3 | 指令4 | 指令5 | 指令6 | 指令7 | … | … | |
---|---|---|---|---|---|---|---|---|---|
1T | 取指 | ||||||||
2T | 译码 | 取指 | |||||||
3T | 执行 | 译码 | 取指 | ||||||
4T | 执行 | 译码 | 取指 | ||||||
5T | 执行 | 译码 | 取指 | ||||||
6T | 执行 | 译码 | 取指 | ||||||
7T | 执行 | 译码 | 取指 | ||||||
8T | 执行 | 译码 | 取指 | ||||||
9T | 执行 | 译码 | 取指 |
执行7条汇编指令最少需要9个时钟周期,1条汇编指令大约需要1个时钟周期。
以上指令的流水线式理想情况的指令的流水线,当有跳转,异常,中断等指令执行时会打断指令的流水线。文章来源地址https://www.toymoban.com/news/detail-621037.html
到了这里,关于【ARM体系结构】之寄存器与三级流水线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!