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

相关推荐
Crossoads10 天前
【汇编语言】第一个程序(三)—— 深度剖析汇编程序的执行流程:编辑、编译、连接与运行
android·java·开发语言·数据库·网络协议·机器学习·汇编语言
xuan哈哈哈12 天前
汇编语言
网络安全·汇编语言
Crossoads15 天前
【汇编语言】第三章----寄存器(内存访问)(八)—— 栈顶越界的问题
java·开发语言·数据库·网络协议·tcp/ip·机器学习·汇编语言
Crossoads20 天前
【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制
android·java·tcp/ip·机器学习·cpu··汇编语言
Crossoads21 天前
【汇编语言】寄存器(内存访问)(二)—— DS和[address]
android·java·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段
android·开发语言·网络协议·tcp/ip·机器学习·汇编语言
Crossoads1 个月前
【汇编语言】寄存器(CPU工作原理)(五)—— 段寄存器以及CS和IP
android·网络协议·tcp/ip·机器学习·汇编语言
tekin1 个月前
macos vscode+dosbox 8086汇编语言开发调试环境搭建方法 包含所有相关的工具的下载和安装配置方法
macos·dos·汇编语言·dosbox·tasm·汇编语言开发环境
安红豆.1 个月前
特殊的 BASE64 1
ctf·base64·汇编语言·逆向工程
2401_858286112 个月前
汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
汇编·nasm·汇编语言·x86·virtualbox·8086·virtual box