这篇文章上次修改于 2003 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

我们已经看了基本逻辑电路,运算电路,内存的概述。今天我们用着几个东西来组装 CPU。

CPU 简易结构图

我们看到这张图,我们的简易 CPU 有运算逻辑部件、寄存器部件和控制部件(图中的指令解析)

CPU 工作流程

CPU 的运行有读取指令,解析指令,运行三个阶段。
我们模拟一下使用计算机来计算一个 1+1,看看计算机是如何工作的!
假设我们已经写好了我们的程序,并放到了内存中,如下图所示:

假如我们 指令地址寄存器 的地址为 00000000

  1. CPU 通电首先读取指令地址寄存器的地址(可以理解成系统第一条指令),然后读取相应的内存数据。
  2. 得到 00010001 ,然后拆分命令是 0001 数据是 0001(假设 0001 是加载到 寄存器1 中)
  3. 执行命令把 0001 存储到 寄存器1 中,把下一个地址 00000001 存到 指令地址寄存器 中
  4. 然后开始第二轮 读取内存地址 00000001 的数据
  5. 得到 00110001 ,然后拆分命令是 0011 数据是 0001(假设 0011 是加载到 寄存器2 中)
  6. 执行命令把 0001 存储到 寄存器2 中,把下一个地址 00000011 存到 指令地址寄存器 中
  7. 然后开始第三轮 读取内存地址 00000011 的数据
  8. 得到 10000111 ,然后拆分命令是 1000 数据是 0111(假设 1000 是对两个寄存器进行加法运算)
  9. 执行命令把 寄存器1 寄存器2 的值进行相加。

OK! 我们看了上边流程,我们还有几个问题?

  1. 我们还隐约的发现还缺个东西没有说也就是「指令表」,每款 CPU 都需要一定的指令表,写好程序来让计算机去运算。
  2. 晶振的频率来推进 CPU 的运算速度,如果 CPU 早就计算完了晶振还不继续往下运算,就拖慢了整体运行速度。晶振这个词我们可能听着比较生疏,我们平常买 CPU 上面写的多少多少 HZ 就是指的这个。( 1GHZ = 十亿赫兹 现代的 CPU 运算速度都比较快)

小结

看完了上面,我就理解了为什么 C 语言之类程序不同的平台需要进行移植,因为不同的 CPU 指令集不一样。然而像 Java 这些虚拟机语言,是在虚拟机上提供了通用的指令表,虚拟机还是需要针对不同的 CPU 平台进行单独编码!

你们还看了什么,欢迎留言一起讨论。