0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CPU的内部结构剖析

jf_78858299 来源:前端柒八九 作者:前端柒八九 2023-03-31 16:04 次阅读

CPU的内部结构

❝CPU是中央处理器Central Processing Unit的缩写,相当于计算机的大脑,它的内部由数百万至数亿个 晶体管 构成。

「程序运行流程」 中,CPU所负责的就是 「解释和运行」 最终转换成 「机器语言」 的程序内容。

图片

程序运行流程

CPU和内存是由许多晶体管组成的 电子部件」 ,通常成为集成电路Integrated Circuit。

❝从功能方面来看,CPU的内部是由 寄存器控制器「运算器」时钟 等四个部分组成,各个部分之间由 电流信号 相互连通。

图片

CPU的四个组成部分

  1. 「寄存器」
    • 用来 「缓存」 指令、数据等处理对象,可以将其看作是**「内存的一种」**
    • 根据种类的不同,一个CPU内部户有20~100个寄存器
  2. 「控制器」
    • 负责把 「内存」 上的指令、数据等读入**「寄存器」**
    • 并根据指令的执行结果来 「控制」 整个计算机
  3. 「运算器」
    • 负责运算**「从内存读入寄存器的数据」**
  4. 「时钟」
    • 负责发出CPU开始计时的**「时钟信号」**

内存

❝通常所说的 「内存」 指的是计算机的主要存储器Main Memory,简称 「主存」

主存通过 控制芯片 等与CPU相连,主要负责 「存储指令和数据」 。主存由 「可读写」 的元素构成,每个字节(1字节=8位)都带有一个 「地址编号」CPU可以通过该地址 「读取」 主存中的指令和数据,当然也可以 「写入」 数据。

程序运行机制

程序启动后,根据 「时钟信号」「控制器」 会从 「内存」 中读取指令和数据。通过对这些指令加以解释和运行, 「运算器」 就会对数据进行运算, 「控制器」 根据该运算结果来控制计算机。


CPU是寄存器的集合体

CPU的四个构成部分中,我们只需要了解寄存器即可。这是因为, 「程序是把寄存器作为对象来描述的」

假设,我们存在如下用汇编语言编写的代码。

「汇编语言」 采用助记符Memonic来编写程序,每一个原本是 电气信号」「机器语言指令」 都有有一个与其 「相对应的助记符」

助记符通常为指令功能的英语单词的缩写。

图片

汇编代码

例如,movadd分别是数据的存储和相加的简写。

「汇编语言和机器语言基本上是一一对应的」

  • 通常我们将 「汇编语言」 编写的程序转化成 「机器语言」 的过程称为**「汇编」**
  • 反之, 「机器语言」 程序转化成 「汇编语言」 的程序的过程称为**「反汇编」**

从上述的 「汇编代码」 中,我们可以看出, 「机器语言级别的程序是通过寄存器来处理的」 ,也就是说, 「CPU是寄存器的集合体」eaxebp表示的都是寄存器。并且,内存的存储场所 「通过地址编号来区分」 ,而寄存器的种类 「通过名字来区分」

CPU处理程序的大致过程如下:

❝使用 「高级语言」 编写的程序会在 「编译」 后转化成 「机器语言」 ,然后再通过CPU内部的寄存器来处理。

寄存器的种类

❝不同类型的CPU,其内部寄存器的数量、种类以及寄存器存储的数值范围都是不同的。

不过,根据功能的不同,我们可以将寄存器大致分为 「8类」

图片

寄存器的主要种类和功能

可以看出,寄存器中存储的内容既 「可以是指令也可以是数据」 。其中,数据分为 「用于运算的数据」 和**「表示内存地址的数据」**

图片

CPU是寄存器的集合体


决定程序流程的程序计数器

只有1行的有用程序是很少见的,机器语言的程序也是如此。接下来,我们看一下程序是如何按照流程运行的。

下图是程序启动后的内存内容的模型。

❝用户发出启动程序的指示后, 操作系统 会把 「硬盘」 中保存的程序 「复制」「内存」 中。

实例中的程序实现的是将123456两个数值相加,并将结果输出到显示器上。图片

前面我们已经介绍过,存储指令和数据的内存,是通过地址来划分的。由于使用机器语言难以清晰地表明各地址存储的内容,因此我们对各地址的存储内容添加注释。实际上, 「一个命令和数据通常被存储在多个地址上」 ,但是为了便于说明,上面的图例中,把指令、数据分配到一个地址中。

大致流程如下:

  1. 地址0100是程序运行的开始位置。
  2. 操作系统把程序从 「硬盘」 复制到 「内存」 后,会将 「程序计数器」CPU寄存器的一种)设定为0100,然后程序便开始运行。
  3. CPU每执行一个指令,程序计数器的值就会自动加1」
  4. 然后,CPU「控制器」 就会参照程序计数器的数值,从内存中读取命令并执行。

❝程序计数器决定着程序的流程


条件分支和循环机制

程序的流程分为 「顺序执行」「条件分支」「循环」 三种。

  1. 「顺序执行」 是指按照地址内容的顺序执行指令
  2. 「条件分支」 是指根据条件执行任意地址的指令
  3. 「循环」 是指重复执行同一地址的指令

「顺序执行」 的情况比较简单,每执行一个指令 「程序计数器」 的值就 「自动加1」 .但若程序中存在 「条件分支」「循环」 ,机器语言的指令就可以将 「程序计数器」 的值设定为 「任意地址」 (不是加1)。这样一来,程序便可以返回到上一个地址来重复执行同一个指令,或者跳转到任意地址。

条件分支运行流程

图片上图表示把内存中存储的数值(示例中是123)的绝对值输出到显示器的程序的内存状态。

大致流程如下:

  1. 程序运行的开始位置是0100地址
  2. 随着 「程序计数器」 数值的增加
  3. 当到达0102地址时,如果 「累加寄存器」 的值是 「正数」 ,则执行 「跳转指令」jump指令)跳转到0104地址
  4. 此时,由于 「累加寄存器」 的值是123,为 「正数」 ,因此0103地址的指令被跳过,程序的流程 「直接」 跳转到了0104地址

「条件分支」「循环」 中使用的 「跳转指令」 ,会参照当前执行的 「运算结果」 来判断是否跳转。

前面我们提到过 「标志寄存器」 。无论当前 「累加寄存器」 的运算结果是负数、零还是正数, 「标志寄存器」 都会将其保存。

CPU在进行运算时, 「标志寄存器」 的数值会根据运算结果 「自动设定」 。至于是否执行 「跳转指令」 ,则由CPU在参考 「标志寄存器」 的数值后进行判断。运算结果的正、零、负 「三个状态」「标志寄存器」 的三个位表示。

图片

32位CPU(寄存器的长度是32位)的标志寄存器的示例

「标志寄存器」 的第一个字节位、第二个字节位和第三个字节位的值为1时,表示的运算结果分别为正数、零和负数。

CPU比较机制

假设要比较 「累加寄存器」 中存储的XXX值和 「通用寄存器」 中存储的YYY值,执行比较的指令后,CPU的运算装置就会在内部进行XXX-YYY「减法运行」

无论减法运算的结果是正数、零还是负数,都会被保存到 「标志寄存器」 中。

  • 结果为 「正」 表示XXXYYY
  • 结果为 「零」 表示XXXYYY相等
  • 结果为 「负」 表示XXXYYY

❝程序中的比较指令,就是在CPU内部做减法运算


函数的调用机制

❝函数调用处理也是通过把 「程序计数器」 的值设定成函数的存储地址来实现的

「条件分支」「循环」 的机制不同,因为单纯的跳转指令无法实现函数的调用。

❝函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点( 「函数调用指令的下一个地址」 )

图片

上图的示例为 变量ab分别代入123456后,将其赋值给参数来调用MyFunc函数的C语言程序。图中的地址是将C语言编译成机器语言后运行时的地址。由于1行C语言程序在编译后通常会变成多行的机器语言,所以图中的地址是 「离散」 的。

此外,通过 「跳转指令」「程序计数器」 的值设定为0260也可以实现调用MyFunc函数。函数的 「调用原点」0132地址)和 「被调用函数」 (0260地址)之间的数据传递,可以通过内存或寄存器来实现。

当函数处理进行到最后的0354地址时,我们应该将 「程序计数器」 的值设定成函数调用后要执行的0154地址。我们通过机器语言的call指令和return指令能实现该功能。

call 指令和return 指令

❝函数调用使用的是call指令,而不是跳转指令。

在将函数的入口地址设定到 「程序计数器」 之前, 「call指令」 会把调用函数后要执行的指令地址存储在名为 「栈」 的内存内。 「return 指令」 的功能是把保存在栈中的地址设定到 「程序计数器」 中。

图片

通过地址和索引实现数组

❝通过 「基址寄存器」「变址寄存器」 可以对 「主内存」 上特定的内存区域进行划分,从而实现类似于数组的操作

图片

  1. 「十六进制数」 将计算机内存上00000000~FFFFFFFF的地址划分出来
    • 凡是该范围的内存区域,只要有一个32位的寄存器,即可查看全部的内存地址
  2. 如果想要像数组那样分割特定的内存区域以达到连续查看的目的,使用两个寄存器会更方便

图片

CPU会把 「基址寄存器」 + 「变址寄存器」 的值解释为实际查看的内存地址。

「变址寄存器」 的值相当于高级程序语言程序中数组的**「索引功能」**

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211086
  • 计算机
    +关注

    关注

    19

    文章

    7409

    浏览量

    87690
  • 晶体管
    +关注

    关注

    77

    文章

    9629

    浏览量

    137807
收藏 人收藏

    评论

    相关推荐

    芯片封装内部结构

    `芯片封装内部结构经典封装知识,内部结构完美呈现,分析芯片封装的每一个知识点。[hide][/hide]`
    发表于 06-11 16:10

    8051内部结构

    8051内部结构供大家参考。
    发表于 12-17 08:59

    51单片机CPU内部结构及工作原理是什么

    51单片机CPU内部结构及工作原理1.51单片机CPU内部结构2.工作原理1.51单片机CPU内部
    发表于 11-18 08:22

    cpu内部结构

    cpu内部结构 1.算术逻辑单元ALU(Arithmetic Logic Unit) ALU是运算器的核心。它是以全加器为基础,辅之以移位寄存器及相应控制逻辑组合而成的电路
    发表于 01-15 10:32 2.2w次阅读

    L4990内部结构框图

    L4990内部结构框图
    发表于 10-15 11:52 785次阅读
    L4990<b class='flag-5'>内部结构</b>框图

    MAX782内部结构框图

    MAX782内部结构框图 内部框图
    发表于 11-14 16:24 983次阅读
    MAX782<b class='flag-5'>内部结构</b>框图

    LT1072的内部结构框图

    LT1072的内部结构框图
    发表于 11-14 16:59 1054次阅读
    LT1072的<b class='flag-5'>内部结构</b>框图

    蓄电池内部结构

    蓄电池内部结构
    发表于 11-16 14:15 5337次阅读

    伺服电机内部结构

    伺服电机内部结构
    发表于 02-25 17:38 4740次阅读
    伺服电机<b class='flag-5'>内部结构</b>

    动铁耳机的内部结构

    动铁耳机的内部结构  
    发表于 05-17 18:28 9380次阅读

    元件的内部结构

    元件的内部结构
    发表于 03-04 17:48 6次下载

    mcs-51单片机CPU内部结构及工作原理

    51单片机CPU内部结构及工作原理1.51单片机CPU内部结构2.工作原理1.51单片机CPU内部
    发表于 11-11 14:21 28次下载
    mcs-51单片机<b class='flag-5'>CPU</b>的<b class='flag-5'>内部结构</b>及工作原理

    交叉导轨的内部结构

    交叉导轨的内部结构
    的头像 发表于 08-16 17:52 992次阅读
    交叉导轨的<b class='flag-5'>内部结构</b>

    MOSFET和IGBT内部结构与应用

    MOSFET和IGBT内部结构不同,决定了其应用领域的不同。
    的头像 发表于 11-03 14:53 960次阅读
    MOSFET和IGBT<b class='flag-5'>内部结构</b>与应用

    深度剖析汽车内部结构和原理

    很多人都想了解更多的汽车知识,以加深对汽车的了解,只是无奈汽车结构之复杂,机械知识之乏味,都一一放弃了。下面给大家准备了一组图解汽车文章,结合图片剖析汽车内部结构,让复杂的原理变得通俗易懂。
    的头像 发表于 12-28 10:31 1076次阅读
    深度<b class='flag-5'>剖析</b>汽车<b class='flag-5'>内部结构</b>和原理