本书首先从黑夜中用手电筒开关灯的方式来与小伙伴交流从而引出了编码与组合的概念,并阐明了编码的本质就是交流,是一种用来在机器与人之间传递信息的方式。然后在第 2~3 章中讲述了编码与组合的应用,如电报机的莫尔斯码及布莱叶盲文,进而引出了二进制码。并在第 7~9 章详细阐述了不同进制及二进制数的概念。

  第 4~6 章,通过剖析手电筒的电路构造,将其拆分为电池,导线,灯泡,开关这四种基本组合,从而讲述了远距离如何用开关控制灯泡来滴滴答答的传递讯息。然后提到了电报机及继电器。并在第 10 章逻辑与开关中详细讲述了电报机的原理。

  亮点在于第 11~17 章,这里从逻辑门开始不断延拓上一章的内容直到一台真正的计算机诞生。

  从第 11 章开始,先把电路变形一下,,将电路的公用导线用地球来代替,将电源拆成电压输入和接地线,所有的接地线都实质上连在一起,这样继电器就只有输入端了。将一个继电器和一个上面有开关的导线封装在一起,就形成了一个带有一个输入端一个输出端的黑箱。利用这个黑箱可以构造各种逻辑门电路(我们认为只要有电压 就是 1,没有电压是 0),这之后的推演就不再依赖继电器,只要有逻辑门就够了(一旦逻辑门被构造出来,其实现便无关紧要了)。

  二进制加法在每 一位上和异或门一样,而进位和与门一样,于是一个异或门和一个与门可以完成一位的加法操作,这是一个半加器。把两个半加器与一个或门连起来可以组成一个全加器。把 n 个全加器连起来便构成了一个 n 位加法器。n 位加法器本身又可以当一个黑箱来使用:它有两个 n 位输入,一个进位输入,一个进位输出以及一个 n 位输出(加法运算的结果)。利用 2 的补码,减法很容易就可以实现,只需要一个由非门构成的求补器和一个表明符号的输入端。

  反馈(输出以某种形式再度输入系统)的引入可以带来全新的 东西。最简单的反馈是把一个继电器短接(开关在电磁铁上方)形成一个振荡器,这个电路会不断以恒定的频率在连通、开路之间变化。再加一些之后也有很大用处的辅助元件就能看到神奇的东西。

  利用逻辑门可以构造一个触发器(Flip-Flop),它有两个输入端,可以储存一位数值。输入端都为 0 是稳态。其中一个变为 1 的时候被存储的数值发生相应变化(分别会将存的值置为 1, 0),输入端再度归零的时候被存储的数值不变。这个东西可以被添加上更多的功能,比如将输入分别与一个一位输入求与后只有在那位输入为 1 的情况下输入才有效,这一位叫时钟端。

  两个输入端总是在相反的时候才有意义,因此可以被合并在一起变成一个数据端。这样我们得到了一个锁存器。锁存器上面还可以再附加一个清零端,一个预置端(分别强行让输出变成 0 或 1),这个比较容易。这是电平触发的触发器,可以将之改造成边沿触发的,即只有在时钟从 0 变成 1 的瞬间数据端的输入才有效,实现上大体是由两个触发器连起来得到的。

  下面是重点:将一个振荡器与边沿触发的触发器连到一起,输出结果与振荡器类似,但是频 率减半,这是一个分频器。分频器可以继续连接下去,得到时钟频率四分之一、八分之一……的信号。注意二进制位从 0, 1, ……变化的时候右起第二位的变化频率是第一位的一半,第三位的频率是第一位的四分之一,这些分频器的输出放到一起就是一个周期性增长的二进制数(或者将其波形图旋转 90°来看也能看出来),于是我们得到了计数器。

  我们可以通过构建一个选择器来利用 n 位信号(地址)选择总共 2^n 位的锁存器(数据)中哪一位被访问,这就是通过地址来访问存储器的基本原理。

  好了万事俱备:

  我们把存储器分成两个部分,一个部分的内容被解释成代码,另一个部分被解释成数据,计数器的输出被认为是当前应该访问的地址。按照计数器的输 出去访问存代码的存储器,取出代码并按照它来执行,代码中可以指定访问哪个地址的数据。允许一些代码在符合条件的前提下强行修改计数器内容(修改后计数器会从被修改的内容开始继续以固定周期自增 1),这就是条件跳转指令。

  这一堆元件总的来说执行以下的机器周期:按照计数器所描述的地址取指令并执行,计数器自增。带条件跳转的按顺序执行指令序列足 以计算所有可计算的东西了。就这样,傻傻的继电器活了起来。

  第18~25 章的内容是进一步的优化。从继电器到真空管再到晶体管来压缩体积提高速度,再引入总线、操作系统、编程语言技术,从ASCII码和字符转换到定点数与浮点数的运算再到可视化编程于是这台原始的继电器计算机慢慢演化成了现代计算机。

《CODE》讲了什么?的更多相关文章

  1. 使用TypeScript拓展你自己的VS Code!

    0x00 前言 在前几天的美国纽约,微软举行了Connect(); //2015大会.通过这次大会,我们可以很高兴的看到微软的确变得更加开放也更加务实了.当然,会上放出了不少新产品和新功能,其中就包括 ...

  2. IDEA/Eclipse简易化使用的几个技巧

    IDEA 易用性计较 代码自动提示,取消大小写限制 Ctrl+/生成的"//" 注释,不能跟代码块自动对齐 Eclipse 优化技巧目录 1.更改编码,统一全局的字体编码格式 2. ...

  3. 比较windows phone程序启动和android程序启动原理

    windows phone 程序是如何启动的了,他和android程序有什么区别,我们重点从native code 层面来分析 在windows phone 程序启动的时候是: 在XAML中使用应用程 ...

  4. 使用TypeScript拓展你自己的VSCode

    转自:http://www.iplaysoft.com/brackets.html使用TypeScript拓展你自己的VSCode! 0x00 前言在前几天的美国纽约,微软举行了Connect(); ...

  5. Mybatis原理和代码剖析

    参考资料(官方) Mybatis官方文档: https://mybatis.org/mybatis-3/ Mybatis-Parent : https://github.com/mybatis/par ...

  6. Solution -「SPOJ-VCIRCLES」Area of Circles

    \(\mathcal{Description}\)   Link.   求平面上 \(n\) 个圆的并的面积.   \(n\le50\),可能被圆覆盖的横纵坐标区域在 \([-10^4,10^4]\) ...

  7. 第13讲 | 套接字Socket:Talk is cheap, show me the code

    第13讲 | 套接字Socket:Talk is cheap, show me the code 基于 TCP 和 UDP 协议的 Socket 编程.在讲 TCP 和 UDP 协议的时候,我们分客户 ...

  8. 转: Source Code Lookup in Eclipse(主要讲的是java的)

    Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/

  9. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

随机推荐

  1. PHP常用代码:

    1.$array=explode(separator,$string); //字符串->数组 2.$string=implode(glue,$array);//数组->字符串 3.file ...

  2. ecshop后台根据条件查询后不填充table 返回的json数据,content为空?

    做ecshop后台开发的时,根据条件查询后,利用ajax返回的content json数据内容为空,没有填充table 效果 预期效果 问题: make_json_result($smarty -&g ...

  3. 局部变量存储区域静态变量存储区域static变量存储区域

    局部变量存储区域静态变量存储区域static变量存储区域 常见的存储区域可分为: 1.栈 由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆 ...

  4. Windows Open with Sublime Text

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Open with Sublime Text] "Icon&q ...

  5. bzoj3541: Spoj59 Bytelandian Information Agency

    Description        BIA机构内部使用一个包含N台计算机的网络.每台计算机被标号为1..N,并且1号机是服务器.计算机被一些单向传输线连接着,每条数据线连接两台计算机.服务器可以向任 ...

  6. NSNumber

    integerfloatc 在Objective-c中有int的数据类型,那为什么还要使用数字对象NSNumber?这是因为很多类(如NSArray)都要求使用对象,而int不是对象.NSNumber ...

  7. 安装 mysql server

    三个月前向公司申请了一台服务器单独给我用,作为部署我写的自动发布工具的服务器.同事不久前在我这台服务器上装了个数据库,今天上去查了一下,用不了,只有information_schema和test两个数 ...

  8. 将Excel导入到数据中

    常用的方式的有两种: 1. 通过 Microsoft.Jet.OLEDB.4.0 或  Microsoft.ACE.OLEDB.12.0 Microsoft.ACE.OLEDB.12.0 需要安装 A ...

  9. CVE-2015-1635,MS15-034 漏洞测试

    HTTP.sys远程执行代码漏洞(CVE-2015-1635,MS15-034) 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 H ...

  10. jQuery Asynchronous

    http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html http:// ...