专栏首页程序员成长充电站CPU处理程序的三个阶段

CPU处理程序的三个阶段

我们已经做了一个算术逻辑单元(ALU)输入二进制,它会执行计算。我们还做了两种内存: 寄存器 - 很小的一块内存,能存一个值 ,之后我们增大做出了 ,RAM 是一大块内存,能在不同地址存大量数字,现在是时候把这些放在一起,组建计算机的 "心脏" 了。但这个 "心脏" 不会有任何包袱,比如人类情感.。计算机的心脏是"中央处理单元",简称 "CPU" 。CPU 负责执行程序,比如 Office,Safari 浏览器。程序由一个个操作组成 ,这些操作叫"指令"(Instruction) ,因为它们"指示"计算机要做什么,如果是数学指令,比如加/减 ,CPU 会让 ALU 进行数学运算,也可能是内存指令,CPU 会和内存通信,然后读/写值,也可能是内存指令,CPU 会和内存通信,然后读/写值,CPU 里有很多组件。

所以我们一边说一边建 我们把重点放在功能,而不是一根根线具体怎么连,当我们用一条线连接两个组件时,这条线只是所有必须线路的一个抽象。这种高层次视角叫 "微体系架构" 。我们首先要一些内存,把上集做的 RAM 拿来就行。为了保持简单,假设它只有 16 个位置,每个位置存 8 位 ,再来四个 8 位寄存器,叫 A,B,C,D 寄存器用来 临时存数据 和 操作数据 ,我们已经知道数据 是以二进制值存在内存里 。程序也可以存在内存里 ,我们可以给 CPU 支持的所有指令,分配一个 ID 指令表 指令 描述 4位操作码 地址或寄存器 。在这个假设的例子,我们用前四位存 "操作代码" 简称 "操作码" (opcode) ,后四位代表数据来自哪里,可以是寄存器或内存地址。我们还需要两个寄存器,来完成 CPU。

  1. 一个寄存器追踪程序运行到哪里了,我们叫它 "指令地址寄存器" 。顾名思义,存当前指令的内存地址 。
  2. 另一个寄存器存当前指令,叫 "指令寄存器" 当启动计算机时,所有寄存器从 0 开始。

取指令阶段

为了举例,我们在 RAM 里放了一个程序,我们今天会过一遍 CPU 的第一个阶段叫 "取指令阶段" ,负责拿到指令,首先,将 "指令地址寄存器" 连到寄存器的值为 0,因此 RAM 返回地址 0 的值 0010 1110 会复制到 "指令寄存器" 里。

解码阶段

现在指令拿到了,要弄清是什么指令,才能执行(execute) 要弄清是什么指令,才能执行(execute)而不是杀死(kill)它 。这是 "解码阶段" 指令表 指令 描述 4位操作码 地址或寄存器,前 4 位 0010 是 LOAD A 指令 。意思是,把 RAM 的值放入寄存器,后 4 位 1110 是 RAM 的地址, 转成十进制是 。接下来,指令由 "控制单元" 进行解码,就像之前的所有东西 "控制单元" 也是逻辑门组成的,比如,为了识别 "LOAD A" 指令,我们需要一个电路,检查操作码是不是。我们可以用很少的逻辑门来实现。

执行阶段

现在知道了是什么指令就可以开始执行了,开始 "执行阶段",用 "检查是否 LOAD_A 指令的电路" 可以打开 RAM 的 "允许读取线", 把地址 14 传过去 ,RAM 拿到值,0000 0011,十进制的 3。因为是 LOAD_A 指令,我们想把这个值只放到寄存器 A,其他寄存器不受影响。所以需要一根线,把 RAM 连到 4 个寄存器用 "检查是否 LOAD_A 指令的电路" 。启用寄存器 A 的 "允许写入线",这就成功把 RAM 地址 14 的值,放到了寄存器。既然指令完成了,我们可以关掉所有线路,去拿下一条指令,我们把 "指令地址寄存器"+1,"执行阶段"就此结束。

LOAD_A 只是 CPU 可以执行的各种指令之一,不同指令由不同逻辑电路解码,这些逻辑电路会配置 CPU 内的组件来执行对应操作,具体分析这些解码电路太繁琐了。既然已经看了 1 个例子, 干脆把 "控制单元 "包成一个整体,简洁一些。没错,一层新抽象,控制单元就像管弦乐队的指挥 ,"取指令→解码→执行" 完成后,现在可以再来一次。

本文分享自微信公众号 - 程序员成长充电站(qianpangzi8),作者:钱胖子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CPU的核心原理

    前面我们这里假设的 CPU 很基础,所有指令都是 8 位,操作码只占了前面 4 位,即便用尽 4 位,也只能代表 16 个指令,而且我们有几条指令,是用后 4 ...

    硬核编程
  • CPU怎么去执行程序的?

    从 "取指令" 开始,"指令地址寄存器" 现在的值是 1 到 "解码" 阶段! 0001 是 LOAD B 指令 从 RAM 里把一个值复制到寄存器 B,这次内...

    硬核编程
  • CPU的价值

    一种提升性能的方法叫 "指令流水线",想象下你要洗一整个酒店的床单,但只有 1 个洗衣机, 1 个干燥机。

    硬核编程
  • 程序员需要了解的硬核知识之CPU

    大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,...

    cxuan
  • 处理器并行设计

    233333
  • Linux-Bash指令

    悠扬前奏
  • 流水线、超流水线、超标量(superscalar)技术对比(转)

    流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未...

    zy010101
  • 流水线、超流水线、超标量(superscalar)技术对比

    本文转载自:https://blog.csdn.net/qq_32092885/article/details/83349275

    zy010101
  • arm(2)| 汇编指令和伪指令

    指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的...

    飞哥
  • 我是一个一生仅被执行5次的指令

    听前辈们说,人类在一生即将结束的时候,脑海中就会跑马灯般浮现自己这一生的场景,从出生的第一刻起,到幼年、青年、壮年、老年,直至此时。

    roobtyan

扫码关注云+社区

领取腾讯云代金券