【ARM体系结构】之寄存器与三级流水线

1、ARM核的寄存器组织

1.1 寄存器概念介绍

在这里插入图片描述

控制器:控制程序运行,进行取指令操作,并将指令给到对应的运算器执行指令。
运算器:执行汇编指令,执行指令需要的使用的数据来源于寄存器,并将执行的执行结果返回到寄存器中。
存储器:又名寄存器,用来进行数据存储。

1.2 ARM-v7架构的arm内核的寄存器组织

在这里插入图片描述

在这里插入图片描述

  1. 寄存器组织图中,每个小方块就是一个寄存器,每个寄存器都是32位。
  2. 寄存器没有地址,访问寄存器是通过编号进行访问的,R0-R15,cpsr,spsr.
  3. 每种工作模式只能访问自己模式下的对应的寄存器,不可以访问其他模式下的寄存器。
  4. banked类型的寄存器表示私有的寄存器,非banked类型的寄存器表示公有的寄存器。
  5. 如果工作模式下具有私有的寄存器就不可以访问对应编号的公有的寄存器, 如果工作模式下没有私有的寄存器才可以访问公有的寄存器。 和上图的图2进行对照理解。
  6. user模式和sys模式共用一套寄存器组织
  7. 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寄存器中的指令的地址完成取指的操作,交给译码器对指令进行译码; 译码器:对指令进行翻译,交给对应的执行器执行指令;
执行器:执行汇编指令并将结果写回到寄存器。

以上三个器件都属于单周期(之间相互独立,工作互不干扰)的器件,完成一次操作需要一个时钟周期。

指令1指令2指令3指令4指令5指令6指令7
1T取指
2T译码取指
3T执行译码取指
4T执行译码取指
5T执行译码取指
6T执行译码取指
7T执行译码取指
8T执行译码取指
9T执行译码取指

执行7条汇编指令最少需要9个时钟周期,1条汇编指令大约需要1个时钟周期。
以上指令的流水线式理想情况的指令的流水线,当有跳转,异常,中断等指令执行时会打断指令的流水线。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程远泊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值