# 制作一个能够执行指令的计算机

首先，让我们先做一个最简单的计算机，这个计算机完成的功能就是让“十六进制数码管”无限循环的从9倒计时显示到0，每隔一个时钟周期变换一个数字。如下图所示，这个简单的计算机主要由1个4位“触发器”和1个4位输入8位输出“只读存储器（ROM）”组成。ROM输出数据的低4位连接到“触发器”的输入端，ROM输出数据的高4位连接到“十六进制数码管”。

![](https://3964505959-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FW1K2pamBzK76kBfmyyQw%2Fuploads%2Fgit-blob-3c931035d1002b31d22df2791fd149e6b13ec725%2F5-1.gif?alt=media)

我们先来看看这个“只读存储器（ROM）”存放的是什么数据？如果你比较熟悉Logisim软件的话，那么你可能已经通过图中的“只读存储器（ROM）”界面上看出来存放了什么数据。但是，为了更加直观的观察数据，我把它整理成了一份表格，如下图所示（表格中D0\~D7指的是ROM输出端从上至下的第0位到第7位）。

| 地址   | D3\~D0 | D7\~D4 | 十六进制 |
| ---- | ------ | ------ | ---- |
| 0000 | 0001   | 1001   | 0x91 |
| 0001 | 0010   | 1000   | 0x82 |
| 0010 | 0011   | 0111   | 0x73 |
| 0011 | 0100   | 0110   | 0x64 |
| 0100 | 0101   | 0101   | 0x55 |
| 0101 | 0110   | 0100   | 0x46 |
| 0110 | 0111   | 0011   | 0x37 |
| 0111 | 1000   | 0010   | 0x28 |
| 1000 | 1001   | 0001   | 0x19 |
| 1001 | 0000   | 0000   | 0x00 |

上图表格中，地址列表示的是数据D7\~D0存放到ROM的哪个地址，D3\~D0表示的是所存数据的低4位，D7\~D4表示的是所存数据的高4位。现在我们来逐步分析下它是如何驱动“十六进制数码管”完成一个从9到0的倒计时功能的。

1. 首先，我们先看看电路首次通电的情况，“时钟信号发生器”默认输出0，由于“触发器”接收不到0变1的控制信号就会维持默认数据，这里我们电路刚通电后，触发器的默认值是0。所以“只读存储器”地址传入0，输出数据为0x91，即二进制的10010001。其中高4位D7\~D4为1001，它被传给“十六进制数码管”，因而数码管显示“9”。“只读存储器”输出的低4位D3\~D0为0001，它被传给了“触发器”的数据输入端。
2. 当“时钟信号发生器”由0变1后，“触发器”数据输入端的0001被重新保存下来，并输出0001。此刻我们再看“只读存储器”，因为它的址变成了0001，所以它输出数据为0x82，即二进制的10000010。我们知道“十六进制数码管”显示的内容就是“只读存储器”输出数据的高4位，所以此刻“十六进制数码管”显示8，即二进制的1000。“只读存储器”输出的低4位0010再次被传给了“触发器”的数据输入端。
3. 重复第2步。这样我们就实现了“十六进制数码管”从9到0的倒计时的功能！需要注意的是，当“只读存储器”变成1001时，“只读存储器”输出的低4位D3\~D0为0000，整个系统又回到了初始状态，即从头循环再来。

说到这里，我们来重新定义几个概念。我们后面用来存储数据的元件主要就是由多位“触发器”来实现的，从使用功能的角度来说，我们也可以称它为“寄存器”。当然寄存器也可以由多位“锁存器”组成，在本书教程里我们主要使用“触发器”来保存数据。另外，“只读存储器”里面的数据我们也可以起个新的名字，叫做“指令”，每一条数据都是一条“指令”。这个计算机就是在指令的控制下完成了“十六进制数码管”倒计时显示数字的功能。注意，在之前的章节我们都是使用鼠标不停的点击“时钟信号发生器”来进行高低电平的切换，其实Logisim软件已经为我们提供了自动切换高低电平的功能，只需在软件的菜单栏点下即可，同时还可以选择高低电平的切换频率。

再回头看这个简单的计算机系统，ROM存放了一堆指令，指令的低4位D3\~D0用来控制指令的执行顺序，高4位D7\~D4用来控制各种外部的输出状态。而“时钟信号发生器”就像是整个计算机的心脏，每产生一次高低电平就犹如心脏跳动一次，心脏跳动的速度越快，计算机运行的速度也就越快。如果我们想提高这台计算机的运行速度，那么只需要提高“时钟信号发生器”的频率即可。到此，你有没有联想到什么？你是不是在购买电脑或手机的时候，会挑选CPU主频更高一点电脑，因为这种电脑运行速度更快，而这里的CPU主频指的就是电脑的心跳频率，就像这个“时钟信号发生器”一样。
