CPU&寄存器
内部部件之间由总线连接
CPU包含控制器 、运算器 和寄存器,其中寄存器的作用就是用来临时数据的存储。
CPU的运算速度是非常快的,为了性能CPU在内部开辟了一小块临时存储区域,并在进行运算时,先将数据从内存复制到这一小块临时存储区域中,运算时就在这一小块存储区域进行。我们称这一小块临时存储区域为寄存器。
对于arm64的CPU来讲,如果寄存器以"x"开头,则表明是一个64位寄存器,如果以"w"开头则表明是一个32位寄存器,在系统中没有提供16位和8位的寄存器提供访问和使用。其中32位寄存器是64位寄存器的低32位部分,并不是独立存在的。
- 对于程序员来说,CPU最重要的部分就是寄存器,可以通过改变寄存器的内容来实现对CPU的控制
- 不同的CPU,寄存器的个数,结构是不同的
浮点寄存器
因为浮点数的存储以及其运算的特殊性,CPU中专门提供浮点寄存器来处理浮点数
浮点寄存器64位:D0-D31 32位:S0-S31
向量寄存器
现在的CPU支持向量运算(向量运算在图形处理相关领域使用的非常的多),为了支持向量运算计算机系统也提供了众多的向量寄存器
向量寄存器128位:V0-V31
通用寄存器
- 通用寄存器也成为数据地址寄存器,通常用来做数据运算的临时存储、做累加、技术、地址保存的功能,定义这些寄存器主要的作用是用于在CPU指令中保存操作数,在CPU中当做一些常规变量来使用。
- ARM64拥有32个64位寄存器x0-x30,以及XZR(零寄存器),这些通用寄存器有时也有特定的用途。
- w0-w28这些事32位寄存器,因为64位CPU可以兼容32位,所以只使用64位CPU的低32位即可。
- 比如w0就是x0的低32位寄存器(下面图中x0是0x0000000016ce13858,w0是0xce13858)
注意: 对于8086CPU,有一种特殊的寄存器,CS、DS、SS、ES四个寄存器来保存这些段的及地址,这个是属于Intel架构的CPU,ARM中并没有
使用流程: 通常,CPU会先将内存中的数据储存到寄存器中,然后在对通用寄存器中的数据进行运算。 假设内存有红色内存空间的值是3,现在想把他+1,并将结果存储在蓝色空间内:
- 第一步:CPU首先会将红色空间内的值放到x0寄存器中:mov x0,红色空间
- 第二步:然后让x0寄存器与1相加,add x0,1
- 第三步:最后将值赋值给蓝色内存空间:mov 蓝色空间,x0
pc寄存器
指令指针寄存器,它指示了CPU当前要读取指令的地址 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息
cpu在工作的时候吧有的信息当做指令,有的信息看做数据,为同样的信息赋予了不同的意义
比如:1110 0000 0000 0011 0000 1000 1010 1010,可以当做数据0xE003008AA,也可以当做指令mov x0,x8
cpu根据什么将内存中的信息当做指令处理 CPU将PC寄存器只想的内存单元的内容看做指令 如果内存中的某段内容曾被CPU执行过,那么它所在的内存单元一定被CPU指向过
高速缓存
iPhoneX上搭载的ARM处理器A11它的1级缓存的容量是64KB,2级缓存的容量是8M
CPU每执行一条指令前都需要从内存中将指令读取到CPU内并执行。而寄存器的运行速度相比内存读写要快的多,为了性能,CPU还集成了一个高速缓存区域,当程序运行时,先将要执行的指令代码以及数据复制到高速缓存中区(由系统完成),CPU直接从高速缓存依次读取指令来执行
b指令与bl指令
- CPU从何处执行指令是有pc寄存器中的内容决定的,我们可以通过改变pc寄存器中的内容来控制CPU执行目标指令
- ARM64提供了一个mov指令(传送指令),可以用来修改修改大部分寄存器的值,比如:
- mov x0,#10(#代表后面是一个常数)
- 但是不可以修改pc寄存器的,ARM64没有提供这样的功能
- ARM64提供了另外的指令来修改pc寄存器的值,这些指令统称为转移指令,简称为bl
- b指令已经可以实现功能:作用是跳过某一段指令,如果使用bl,则是在跳转的同时,会将bl下面的指令存入lr(x30)寄存器中,用来记录回家的路
其他
数量单位:(1M=1024K 1K=1024)
容量单位:(byte)(1024B = 1KB 1024KB = 1MB)
带宽(100M):是指100Mbps,传输速率的单位,每秒钟传输多少个二进制位,bit位,100M带宽理论上的下载速度是12.5M