共计 3330 个字符,预计需要花费 9 分钟才能阅读完成。
🤫 关注公众号并回复「编码」🤫
获取《编码:隐匿在计算机软硬件背地的语言》超具体思维导图
「储存器(storage)和内存(memory)有什么区别?」
「为什么 MacOS 环境下的程序不能在 Windows 下运行?」
……
Windows 编程界的传奇人物 Charles Petzold 说,当他想要答复这些问题时,他一张开嘴就立即意识到,能够答复的内容切实太多了,为了把这些问题掰开揉碎讲清楚,他写下 《编码:隐匿在计算机软硬件背地的语言》 这本经典。
1994 年,Petzold 被授予 Windows 先锋奖,他的著述 Programming Windows 是学习微软编程的必读之作,而这本讲述计算机工作体系的书籍,更是堪称古代魔法原理指南。
在这本书中,Petzold 一直提出难题并率领读者解决问题。
如果你是计算机科班出身,重读基本原理、理解计算机倒退脉络,正本清源,开卷有益 ;如果你是计算机小白,你能够跟着作者的步调搭积木,把导线、灯泡、开关、逻辑门等部件组装起来,通过层层形象后,你将会 用逻辑思维构建一个残缺的 CPU!
你将从这本书中取得:
- 理解计算机倒退整体历史脉络
- 自底向上了解 CPU 工作原理
- 学会层层形象的思维形式,将曾经创造的工具封装形象起来,向上构建体系
从布莱叶盲文到二进制编码
编码是如何产生的、什么要应用编码?这是这本书探讨的次要问题。
小编认为最精彩的局部,是在解说摩斯电码之后,作者进一步介绍盲文的诞生:
霍伊学生视力健全,因而他被本身的感知模式所禁锢。对他来说,一个字母 A 就是一个 A,字母 A 在记录时必须看起来(或者)感觉起来像一个 A。霍伊学生没有意识到,有一种齐全不同于印刷字母的文字零碎可能更适宜盲人浏览。
法国军队的一位军官在 1819 年创造了一种他自称为「夜间书写」的文字零碎。他在厚纸上应用凸起的点和划的组合来示意文字,这样当部队须要无声交换时,即便光线很暗,士兵们也能够通过这些符号相互传递信息。
……一个盲人学生如果有了纸张和笔,他就能够做笔记,同时还能浏览记下的文字。12 岁的盲人小孩布莱叶开始不辞辛劳地改良这个文字零碎……
在布莱叶盲文中,字母、数字、标点等符号都被编码为 2 x 3 的点码单元中的一个或多个凸起的点,如上图左上角所示。
你或者敏锐地察觉到了布莱叶盲文与二进制的关联:一个独自的点,不是凸起来的,就是平的,只有两种可能性!因而,6 个可平可凸的的点就有 2^6 = 64 种组合形式。因而,布莱叶盲文零碎能够示意 64 种符号,上图就是根本的小写字母表。
布莱叶盲文系统对咱们了解编码,有哪些帮忙?
二进制的思维,从实质上就是 可能性的遍历,每个点只有平 / 凸两种可能,这为咱们进一步了解计算机二进制打下基础。
编码就是交换:部队想在夜间机密交换,盲人渴望书写和记录……对交换的渴望是人类不竭的生产力源泉。
主动操作
「主动操作」是这本书的精髓局部,第 1- 16 章对于二进制、加法器、寄存器等内容的解说,都是为了主动操作做铺垫。让咱们跟着作者的思路,用纯逻辑构建一个 CPU 吧!
如果想计算多个数相加的后果,用 1 个 8 位加法器 + 1 个 8 位锁存器就能够实现,然而有两个缺点:
- 8 个灯泡无奈显示后果大于 255 的数
- 如果加数很多,输出的过程中一旦输出谬误,则需从新输出
为了第二个解决问题,咱们能够连贯 64KB 的 RAM 阵列,把输出的数先保留到 RAM 中,每次输出都会通过计数器在 RAM 中寻址后保留,这样等全副输出实现后,就能够期待加法器顺次相加得出后果。
如果想计算 50 对数相加,产生 50 个后果,而后保留到 RAM 中,并且能够任意读取这 50 个后果,应该怎么办?
革新电路,使锁存器的输入连贯到 RAM 的输出端,也就是说把计算后的后果写回到 RAM 阵列中保留。如下图所示:
下一个问题是,如何配置一个主动加法器,使它不仅能够对一组数字做累加运算,还能自主确定累加了多少数字,并且能记住在 RAM 中寄存了多少个计算结果?
总体而言,咱们心愿 8 位锁存器能做这四件事:
- 把一个字节从储存器加载到累加器(Load)
- 把储存器中的一个字节加到累加器中(Add)
- 把累加器的计算结果寄存到储存器中(Store)
- 能够进行(Halt)
为了解决上述问题,须要引入另一个 RAM,来保留 Load、Add、Store、Halt 操作码。也就是说,电路中有两个 RAM 独特工作,RAM1 保留了数据,RAM2 保留代码指令。同时,要想达到 8 位锁存器 Load 指令的成果,需革新电路,8 位加法器的输入与一个 2-1 选择器连贯,2-1 选择器连贯 RAM2 和 8 位锁存器,这样锁存器就能够实现从 RAM2 中执行 Load 指令。
为了解决后果不能大于 255 的问题,咱们能够把加数拆分,别离计算高字节和低字节的和,而后合并就能够失去后果。
低字节加法计算后可能须要进位,这个进位须要与高字节累加才是正确后果,解决办法是:引入 进位锁存器 和进位加法的指令,专门保留进位的值,而后再和高字节累加计算。
目前,这个电路能够计算 8 位数的加法运算,以及 16、24、32 及以上位数的加减运算。尽管能够实现计算的基本功能,然而还不够完满,因为当初的电路应用地址空间是要十分小心的,如果不留神,就会产生 地址被笼罩 的状况,导致执行谬误。
为了解决这个问题,咱们退出一个 跳转指令,同时革新电路,使指令的后两个字节输入也能够输入到计数器,而后通过计数器来确定遇到跳转指令后,计数器输入需跳转的地址,实现跳转寻址。
如何实现两数相乘的运算?那么就能够应用 跳转指令 + 跳转条件 来配合实现。所以,咱们须要再减少一个锁存器,叫做零锁存器,只有当加法器的输入全副为 0 时它的值才是 1。通过计数器和零锁存器的配合,就能够实现乘法运算。同理,实现除法、平方根、取对数、三角函数运算也都是可行的。
到这里,咱们实现了一个计算机的外围性能,包含:处理器、存储器、输出设施、输出设备。这里的处理器即是 CPU,次要负责管制和逻辑运算。
只管在高级语言编程中根本用不到汇编,然而了解计算机的底层逻辑对程序的优化有至关重要的作用。任何一个有谋求的程序员,都该当对计算机的底层原理一五一十。
从实验室走进寻常百姓家
到了 19 世纪末,迷信和工程畛域中的特定工作会用上计算设施,但公司、政府、家庭中很少见到计算设施。计算机如何一步步商业化的?
1880 年,美国政府依照宪法进行十年一次的人口普查。然而,过后美国人口迅速增长,如果依照传统的办法,要七年工夫来手工编制,等做完都过期了,1890 年的人口普查甚至预计要 13 年能力实现。人口普查局找到了 Herman Hollerith,他创造了制表机,联合了人工操作和机械打表,构造相似莱布尼茨的乘法器,但用电动构造连贯其余组件。操作人员把一个有 288 个弹簧针的板子压到每一个卡片上,每一根弹簧针对应卡片上的一个穿孔地位,如果有个中央打孔了,针会穿过孔与水银池里的水银接触,造成通路,这个电路登程电磁体就能进行十进制计数。
在 1890 年人口普查中,上图这样的半自动打表机总共解决了超过 6200 万张卡片,使人口普查在短短两年半内实现,也给人口普查办公室省了上百万美元。企业开始意识到,计算机能够晋升劳动力并实现数据密集型的工作。Hollerith 起初成立了制表机器公司,起初与其它机械制造商合并成为了「国际商业机器公司」,也就是赫赫有名的 IBM。
这种「商业机器」带来了更快、更灵便的数据处理,为电子计算机的倒退奠定了深远根底。
从算盘到芯片,这本书不仅介绍了工具的演进,还把这些技术改革放进 广袤的历史背景 中进行叙述,让读者不禁感叹一位位技术蠢才的巧思。
而身处历史中的咱们,也正在参加新一轮的技术反动。
《编码》整本书自底向上、零打碎敲。无论是小白还是资深程序员,空闲时读一读,正本清源,开卷有益。
想要理解更多具体内容?关注公众号并回复书名「编码」,即可取得小编整顿的《编码:隐匿在计算机软硬件背地的语言》高清思维导图。
福利工夫
** 了解计算机底层逻辑,
对程序员有多重要?**
对技术感兴趣的 你,有哪些心头好书?
欢送在评论区留言你的想法,
咱们将选取一位小伙伴,
赠送纸质版《编码:隐匿在计算机软硬件背地的语言》一本!
积攒代码量很重要,
读书、读好书也很重要。
「Zilliz 好书举荐」栏目,
旨在与你分享技术成长相干的书籍,
与你一起先把书读厚,再把书读薄。