Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【阅读笔记】《编码-隐匿在计算机软件背后的语言》 #10

Open
daihere1993 opened this issue Jan 29, 2020 · 0 comments

Comments

@daihere1993
Copy link
Owner

花了五天的时间,又把这本书看了一遍。与第一遍相比,这次看的更加的细致,并写了不少的笔记,还第一时间基于笔记做了些总结,并记录在此。

1、涉及到的名词

1.1 继电器(Relay)

在过去,电报站在长距离信息通信的场景中,过于长的电线会具有很大的电阻,于是就有了继电器,用来放大所接收到的信号。
image

image

后来发现可以基于继电器构建各种「逻辑门」,如下是基于继电器构建的与门和或门的示意图:

image

image

1.2 反相器(Inverter)

可以理解为「非门」,高电平输入低电平输出,低电平输入高电平输出,可用于求二进制的补位。

image

1.3 2-4译码器(2-Line-to-4-Line Decoder)

如下电路图,有两个输入位,四个输出位,其本质就是用两位二进制数来表示四种可能性,类似的还有 3-8、4-16 译码器。

image

1.4 半加器(Half Adder)

由一个异或门和一个与门组合而成,其中两个输入位,对应需要求和的两个数,两个输出位,分别是「加和输出」和「进位输出」。

image

示意图:

image

1.5 全加器(Full Adder)

由两个半加器和一个或门组合而成,三个输入位其中包括一个进位输入,然后是一个进位输出和加和输出。

image

简化示意图:

image

1.6 振荡器(Oscillator)

振荡器是一种特殊的继电器,能够周期性的输出高低电平,又被称为「时钟」。

image

示意图:

image

1.7 D 型触发器(D-type Flip-Flop)

首先,触发器是基于振荡器的原理而组成的一种电路,具备保存信息的功能。

D型触发器有两个输入位,分别是: 数据输入位和保持位,当保持位为0时,数据输入位的变化不会影响输出的结果,当保持位为1时,输出的结果Q与数据位的输入值相等,如果之后把保持位再改成0,就达到了保存数据的效果。

image

D 型触发器的真值表如下:

image

1.8 锁存器(Latch)

将上述D型触发器的控制位改成时钟输入变成了一个「锁存器」。

image

上图是一个一位锁存器,可以用8个一位锁存器组合成一个八位锁存器。用来保存一个字节的数据。

image

1.9 寄存器(Register)

在上述锁存器的基础上增加一个「边沿触发时钟(edge-triggered clock)」就成了一个寄存器。

image

边沿触发时钟: 普通的触发器在保持位等于1的时候数据位的输入决定了最终的输出,而边沿触发时钟在时钟信号从0变成1的时候才会将数据输入位的数据输出。

1.10 选择器(Selector)

选择器有两部分的输入位,选择输入位和数据输入位,其中选择输入位又叫做地址输入位,其原理就是地址输入为的每一种排列组合与每一个输入数据一一对应,通过控制地址位来选择输出哪一个数据。选择器与译码器对应。

2-1选择器有一个地址位两个数据输入位,输出一位数据。8-1选择器有三个地址位8个数据位,输出一位数据。

image

2、二进制加法器的实现

实现二进制加法器核心在于:

  1. 分离加法和进位的逻辑并分别抽象为异或门和与门。
  2. 在对多个数进行累加时,上一次计算的进位输出等于下次计算的进位输入。

下面是两个八位二进制数相加的电路图和示意图:

image

image

3、二进制减法器的实现

减法器的核心在于:

  1. 两个数相减 = 被减数 + 减数的补数
  2. 计算结果的第一位: 0表示正数,1表示负数

所以减法器只需要在加法器的基础上加上一个反相器(用于计算减数的补数)即可。

image

4、随机访问存储器的实现

这个装置的英文是 RAM(Random Access Memory),之所以称为随机访问存储器,是因为这个存储器的读写操作非常的自由,可以通过控制地址位的输入就可以对指定的数据进行操作。

书中出现了 8x1RAM、16x1RAM、1024x8RAM 和 64Kx8RAM 等多种规格的 RAM,命名中的第一个数字表示可存储的最大空间并且它从侧面还表示了这个存储器地址位的个数,比如 64Kx8RAM 就有16 个地址位因为2的16次幂等于64K,第二个数字表示操作数据的位数。

RAM 包含三种输入位:

  • 地址位输入位,地址位的个数决定了 RAM 的最大存储空间
  • 数据输入位
  • 写操作的控制位

image

下图是一个8x1RAM的电路图:

image

5、如何实现自动化操作

这一章引入了「指令」的概念,将指令存放到内存当中用来控制部分组件的控制信号,比如控制计数器和锁存器的时钟和清零信号。如此,我们就可以通过输入指令来实现相应的自动化操作。下面是自动加减法的电路图。

image

为了理解如何实现自动化,需要主要如下几点:

  • 最左边是一个十六位的计数器,用它的输出作为RAM的地址输入,以达到「寻址」的作用,可以把这个计数器理解为「指针」,该指针从0000h开始逐一指向每一个地址位。
  • 用户通过控制面板将所需要处理的数据和指令存储到RAM中。
  • 图中有两个RAM,分别用来存放数据和指令。
  • 锁存器用来存放最近一次操作的结果。

其次,过程中会涉及到三个指令:

  • Load: 第一个数加数需要从RAM加载到锁存器中。该指令会把图中2-1选择器控制位的值设为0,也就是会将RAM输出的数据传给锁存器。
  • Add: 其余的加数需要和锁存器中的数相加。该指令决定了会把图中2-1选择器控制位的值设为1,也就是将加法器的输出数据传给锁存器。
  • Store: 把锁存器中的数再存储到RAM当中。该指令会把RAM的可写位设置为1。
  • Halt: 停止,该指令会关闭计数器的时钟,以停止计数。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant