A002-《编码》-从零开始构建一台计算机

来源:互联网 发布:上虞宇石网络 编辑:程序博客网 时间:2024/05/02 03:01
阅读时间:2016.08

《编码-隐匿在计算机软硬件背后的语言》(csdn下载)

前言

从去年开始,自己开始对计算机的最基本构造、早期历史感兴趣,看过几个用逻辑门自己搭建计算机的案列。
他们从逻辑门开始、自己焊接运算器、控制器、内存、外设,自己设计指令集、甚至编译器…这很鼓舞人。

不知什么时候看到的《CODE》这部书的简介,我立即就想到:这不就是 从零开始构建一台计算机 吗。
很多人觉得书中内容简直简单到可以略过了,有数字电路和汇编基础的我也是几天就看完了。
但对我来说、围观计算机的简洁构造、一步步看到一部可运行的计算机慢慢被搭建起来,是一件很享受的事呀。

其实每一步的产生、每个部件、每次改进,都是为了解决某个问题而已。
我们眼下看到的计算机很复杂、让人迷惑,但它也是从刚出现时的那最直白的样子、一步步变成现在的样子的。
这就像看高手玩游戏一样过瘾,也跟在KSP看别人搭建空间站一样过瘾。
想起了小时候关注金字塔的情形:看考古学家们去解析金字塔是如何一步步被建造起来的。

编码方式

本书较为详细的介绍了人类用过的几种编码方式。
如封面的书名,从上到下就用来如下几种编码方式来描述:
- 英文编码
- 布莱叶盲文编码
- 莫尔斯编码
- 二进制编码(ASCII)
- 中文编码

封面

它们都是人类用来表示信息的一些方法。

开始构造计算机

作者使用双掷继电器来构造如下器件:
- 逻辑门
- 加法器、减法器
- 振荡器(方波)
- 触发器、电平触的发锁存器、上升沿触发的锁存器
- 内存
- 分频器、计数器

最后、作者还设计了12条最基本的指令:
(Load、Store、ADD、SUB、ADC、SBB、JMP、JNZ、JZ、JNC、JC、Halt)
只是没有给出实现指令的逻辑电路,不过、学过数字电路的人都可以设计对应的指令实现电路。
在这些硬件和指令的基础上,组装出一个可以存储程序、并根据程序自动执行的机器。
OMG、这里已经是个计算机了,如本书后面封面的那句话:“从零开始构建一台计算机”,这个过程是很鼓舞很震撼的。

其他收获

1、信号延迟
在这部分里,继电器延迟的存在、让我想起逻辑信号在电路中也会有延迟,这才让书中振荡器得以实现。
如果信号的流动没有延迟,就不会有书中设计的那种振荡器了。
我们在锁存器等等芯片的Datasheet里面看到的低电平时间、高电平时间、上升沿时间等等,都来源于信号在器件上的延迟,一个信号在从输入到生效之前,是有一个延迟时间的,这由器件工艺和构造决定。

2、指令周期
这里也看到了指令为什么需要3个时钟周期或更多的时钟周期(C51需要12个时钟周期)。
这源于指令的实现电路、源于怎么实现一条指令。
指令中的源操作数、目的操作数是顺序获取还是并行获取,需要不同的电路。

3、二进制如何存储
尤其是负数在内存中是什么样子、以及人们如何区分这些二进制、因为计算机可不区分正负。
这解决了之前的疑惑,并让我顺利结束了这篇文章:《A004-补码-(ques=0)》。

4、Inter4004的指令集
书中给出了Inter4004的指令集,并讲解了指令的使用,这是最早的通用CPU的指令集。

有了这些收获,后来看一些介绍古老计算机的纪录片和文章的时候,就不再那么迷惑了,但却带有更高的热情。

自动计算机

这里写图片描述

0 0
原创粉丝点击