2021-04-17

计算机是如何读懂0和1的?- CODE

 

一、计算机组装

根据前面所述,计算机有两大部分组成:CPU和RAM。CPU又包含Control section和ALU以及若干个寄存器等。其中Control section负责调度,ALU负责干活。我们已经介绍了RAM,(详见J Pan:(1)计算机是如何读懂0和1的?- RAM)以及CPU中的ALU(详见J Pan:(2)计算机是如何读懂0和1的?- CPU (上))及Control Section(详见J Pan:(2)计算机是如何读懂0和1的?- CPU (下)),这样就可以组成一个计算机了,如下图所示。

但是还存在一个BUG。前面说了,指令顺序执行的时候,地址存在IAR里面,IAR+1表示RAM中下一条指令,IAR+1实现靠ALU中的加法器,而加法器除了两个输入A和B之外,还有有个进位标志carry in。这个数据来自Flag寄存器,而在计算IAR+1的时候是不需要这个进位标志的,当然我们可以通过清除标志位来实现,但是如果每条指令都干这个事的话就效率太低了。

怎么办呢?——我们知道,利用ALU实现地址增加的操作都是在step 1或Step 4完成,那我们是不是只要保证在这两个阶段carry in标志位为零即可。一个简单的解决方案就是加一个与门,并且只让carry in标志位只在step 5有效。同时要在Step 5将ALU计算的标志位写入Flag寄存器。如下图所示:

这样整个计算机就变成如下样式:

如果我们搭个模型仿真一下,还是会出问题,原因何在呢?——前面我们在Step 5增加一个标志位carry“写”使能,一个Flag的“写”使能。问题就在这个Flag的“写”使能上,请见下图。

在Carry out标志位写入Flag寄存器以后,会立即又传入carry in,导致ALU的输入产生非预期更新,因此出现错误结果。

解决办法就是增加一个进位寄存器,在Step 4进行 “写”使能(即TMP写入时)。这样就可以得到完成的一个8位计算机模型,如下图所示:


二、二进制代码

前面我们已经介绍了如何通过与非门等搭建一个CPU,主要基于原理性介绍,下面我们将用更直接的方式验证一下。《BUT HOW DO IT KNOW – The Basic Principles of Computer for everyone 》作者为方便大家的学习,专门搭建了一个网站But How Do It Know,里面提供了较为丰富的资料,而且还提供了一个在线的CPU,大家可以观察CPU代码运行时内部的变化情况。

我们用一段代码来演示一下,该代码来自But How Do It Know 网站。

假设我们的程序由如下指令组成:

我们现在需要把它翻译成二进制代码,具体过程如下:

第一条:DATA R0, 5

 

所以翻译成二进制代码为:0010 0000。由于DATA为双字节指令,数值存在紧邻之后的位置,所以后一条指令为数值5的二进制代码:0000 0101。

第二条:DATA R1, 5

与第一条类似,二进制码为:0010 0001,0000 0101。

第三条:DATA R3, 1

与前两条类似,二进制码为:0010 0011,0000 0001。

第四条:XOR R2

二进制代码为:1110 1010。

XOR操作码为1110,其中1表示该条指令为ALU指令,110表示XOR。1010表示将寄存器R2(Reg A)的数据与寄存器R2(Reg B)的数据异或处理,结果存储至R2(Reg B)。

第五条:CLF

二进制码为:0110 0000。

第六条:SHR R0

二进制代码为:1001 0000。将R0(Reg A)右移一位,结果存储至R0(Reg B)。

后面诸如此类,这里就不一一翻译,总的二进制代码如下:


三、代码运行仿真

打开网站But How Do It Know ,就可以以看到如下页面:

选择CPU Model Online,上图左下角,在下图提示位置点击CPU模型图片:

 

此时就可以看到完整CPU模型如下:

在模型底部点击:Details

就可以看到作者准备好的一段代码,和我们上一节所示的代码是一致的,点击:Load sample multiplying 5x5,将代码装载入在线的CPU。

此时可以发现,CPU的RAM中已经有二进制代码了。

在页面的右上角,有控制CPU运行的控制项,可以选择观察按步执行结果或者按周期执行结果,当然还可以选择自动运行或者复位等。

运行CPU就可以观察CPU内部的变化情况了。

以上为作者John Clark Scott搭建的在线CPU,如果感兴趣,还可以自己搭建一个,如下图所示:

所用的软件为开源软件Logsim,在But How Do It Know首页点击CPU Model for Logsim即可以看到相关介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值