CPU与寄存器基本

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

相关推荐
我是菜鸡1638420 天前
Arm64 中 B跳转汇编的使用是如何实现的
汇编语言
坤虫debug1 个月前
面试官:你会不会汇编?啊?我会不会编?
汇编语言
Terasic友晶科技1 个月前
第22篇 基于ARM A9处理器用汇编语言实现中断<四>
fpga开发·汇编语言·de1-soc开发板·按键和定时器中断
Terasic友晶科技1 个月前
第23篇 基于ARM A9处理器用汇编语言实现中断<五>
fpga开发·汇编语言·de1-soc开发板·定时器中断周期
Terasic友晶科技1 个月前
第20篇 基于ARM A9处理器用汇编语言实现中断<二>
fpga开发·汇编语言·中断·de1-soc开发板
hummhumm1 个月前
第30章 汇编语言--- 性能优化技巧
开发语言·性能优化·程序设计·优化·汇编语言·高级语言·低级语言
Terasic友晶科技1 个月前
第21篇 基于ARM A9处理器用汇编语言实现中断<三>
fpga开发·汇编语言·中断·de1-soc开发板
Terasic友晶科技1 个月前
第19篇 基于ARM A9处理器用汇编语言实现中断<一>
汇编语言·中断·de1-soc开发板
hummhumm2 个月前
第8章 汇编语言--- 循环结构
java·运维·开发语言·汇编·数据结构·算法·汇编语言
Kent_J_Truman2 个月前
微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)Proteus中Unknown 1-byte opcode / Unknown 2-byte opcode错误
proteus·汇编语言