编码·隐匿在计算机软硬件背后的语言-读书笔记

阅读时间 2018.2.14-2018.2.27

编码·笔记

2018.2.14-2018.2.27

夜会好友

临睡前,你想着和住在街对面好友交谈一会儿,你会怎么做?
打个电话?那确实挺简单的,那如果让我们回到电话还没有出现的时间呢?
或许你可以通过电筒的闪烁次数来表示一个字母表中的字母,但如果这样,一个句子也太费时费力了。
有没有更省事的方案呢?让我们去找找资料。
查阅资料你会发现有个叫摩尔斯码的东西,其通过将不同的”点”和”划”组合起来表示不同的字母,进而构造出完整的句子。
那么我们可以用手电筒的短闪烁表示”点”,长闪烁表示”划”,这样就可以传递摩尔斯码了,你和你的好友各备一份摩尔斯码对应字母的对照表即可。
(至亲密友 编码与组合 布莱叶盲文与二进制码 手电筒的剖析)

绕过拐角

如果你的好友住在街对面,但你们的窗户不是正对的,怎么办?

考虑一种装置,将一根铁棒用细导线绕上几百圈,然后将导线接上电源(可以是一节电池),再接上一个开关,这样构成一个闭合电路。当开关闭合,电路中产生电流时,铁棒将具有磁性,开关断开时,其又会失去磁性。
那么利用这个装置,也就是电磁铁的特性,你可以构造出电报机和继电器。
进而,通过在你们两个的家中架设电报机,你和你的好友将能够绕过拐角进行通信,夜晚不再无聊~
(绕过拐角的通信 电报机与继电器)

二进制数

人的手和脚都有十个指头,而我们生活中常用的又是十进制,这其中的联系想必很明显了。所以我们看到10就想到这是表示十个单位。
考虑一种进制,其一个数位上不是1就是0,这个进制中10却是十进制中的2,这就是二进制。
电路中,开关,灯泡等装置也都只有两种状态,开/关和亮/灭,这样想来,用二进制来表示电路元件的状态,乃至其代表的数据,岂不是很方便?
要知道二进制是所有进制中状态最少的一种进制,简单的变化也表现出一种可控的性质。
n个二进制位(binary digit, bit)可以表示2的n次方种可能组合。
(我们的十个数字 十的替代品 二进制数)

逻辑与门


考虑一个有电源和灯泡的电路,当两开关串联时,只有两个开关同时闭合时,才会形成闭合电路从而产生电流,所以灯泡亮起,将两个开关的状态(开为1,闭为0)和灯泡的状态(亮为1,灭为0)制表:

左开关 右开关 灯泡
0 0 0
0 1 0
1 0 0
1 1 1

这个表和布尔代数中AND表相同。
类似的还有OR(两个输入中至少有一位为1则输出为1),XOR(两个输入互不相同时输出为 1),NOT运算(输入为1则输出为0,输入为0时则输出为1)。
同样的,这些运算也能用不同的电路实现,组合成各种逻辑门,如或门,与门,异或门和非门等。
(逻辑与开关 门)

实现加法

现在让你做十进制数的加法想必不是什么问题,如1+8=9,9+3=12,单个数位上最大的是9,逢十进位。
那么类比一下,二进制数的加法也是这样,单个数位上最大的是1,逢二进位,如01+01=10,00+01=01。
那么如何通过电路来实现二进制加法?
用一张表来描述两位二进制数的所有加法组合,你可能会发现两个bit相加,得到的进位位即是两个bit进行AND运算的结果,得到的加法位则是两个bit进行XOR运算的结果。
那么我们就可以将两个输入和一个异或门,一个与门组合起来,得到进位位输出和加法位输出,这种装置我们称之为半加器,因其没有利用进位位输出。但我们可以将两个半加器组合成一个全加器,这样的装置可以实现一位的二进制数加法,组合多个全加器即可进行多位的二进制数加法。
(二进制加法器)

实现减法

(书中有解释“二的补数”的来历,可以仔细看看)
减一个数也可以用加上一个数的负数来实现,考虑下二进制数中的负数如何表示?
二进制中如果不增加符号,那么可选的表示不是1就是0,那么我们可以用把二进制数中最高位作为符号位,符号位为1则其为负数,1111,表示十进制数-1。
那如何求得一个二进制数的负数呢?
一个二进制数的负数即是该数对2的补数,其结果等于先求该数对1的补数再加上1,也就是先对该数的所有位取反再加上1。
所以改造加法器,在被加数部分加上一组异或门,输入为数字本身和一个减法信号(1则为启用,还记得当异或门吗?当其中一个输入则1时,其输出即是另一个输入取反的结果)。同时将减法信号则作为第一个全加器的进位输入的输入,这样执行减法时,会加上1。
如此,我们便成功给加法器实现了减法运算功能。
(如何实现减法)

锁住数据

振荡器


考虑一种由电磁铁、电源、金属簧片和开关组成的电路,闭合开关后,电磁铁产生磁性,将金属簧片拉下,电路不再连通,电磁铁不再具有磁性,金属簧片复位,电路再次连通,如此往复。
如果金属簧片形变时声音较大,则这就是一个简单的蜂鸣器,如果将金属簧片替换成一把小锤子,旁边放上一个锣,就构成了一个电铃。
这种电路称作振荡器,它的输出周期性变化,通常也被称作时钟。

触发器

还记得或门吗?两个输入中只要有一个为1则输出为1,考虑一种或非门,它的真值表和或门正好相反,即两个输入中只要有一个为0那么输出就为1。

现在我们将两点或非门组合起来,若以R,S代指,则这个电路可以描述为,R的输入为开关A和S的输出,S的输入为开关B和R的输出,而灯泡Q的输入是S的输出。

由此可制表:

R S Q
1 0 1
0 1 0
0 0 Q
1 1 禁止

这种可以“记忆”一些信息的装置就是触发器(上述图表对应R-S触发器)

锁存器

进一步的,通过修改输入端为一个数据输入和时钟输入,我们可以得到一位的“锁存器”,组合多个一位锁存器即可得到多位锁存器。
(反馈与触发器)

TODO

存储装置

串行并行

字符编码

浮点格式

高级语言

图形设备

关键词

  • 二进制转换
  • 补码 反码
  • 逻辑门
  • 加法器
  • 振荡器(时钟 计时器) 触发器 锁存器
  • 十六进制
  • 译码器+锁存器+选择器=RAM
  • KB MB GB
  • 代码 数据 自动 可控行为
  • 操作码 操作数(地址)
  • 穿孔卡片 制表机 人口普查数据统计 CTR - IBM
  • 真空管 晶体管 硅谷
  • 集成电路(IC) TTL(Transistor-transistor logic) CMOS(complementary mental-oxide semiconductor)
  • 计算机芯片/微处理器 英特尔
  • 微处理器性能比较: 数据通路宽度(数据位宽)。最大时钟频率(主频),可寻址范围(寻址空间)
  • 大端序(motorola) 小端序(intel)
  • ASCII Unicode
  • 母板/主板 总线
  • SRAM DRAM
  • 显卡
  • 输入设备 中断 回显
  • 磁带 磁盘
  • memory storage
  • 文件系统 FAT
  • ROM 可编程可擦除只读存储器
  • 引导程序
  • CP/M API BIOS
  • 浮点数 偏移指数 浮点数运算硬件
  • 汇编 交叉汇编 编译
  • 阴极射线管 ASCII 转义 控制字符
  • 像素 色彩 显卡存储器 矢量 光栅 鼠标
  • 图形界面 图形对象
  • 面向对象 数据 代码 消息
  • 电荷耦合器CCD: 扫描仪 摄像机 数码相机 (CCD阵列)
  • 位图 - 数据压缩 BMP GIF JPEG
  • 位图 -> 图元 OCR 手写识别 算法分析
  • 模拟声音<->数字化声音(ADC CDA) 复制/转录 失真
  • 语音识别
  • 数字化电影 帧
  • 载波 调制
  • 移位寄存器 串行 并行
  • 平台无关性