《CODE》讲了什么?
本书首先从黑夜中用手电筒开关灯的方式来与小伙伴交流从而引出了编码与组合的概念,并阐明了编码的本质就是交流,是一种用来在机器与人之间传递信息的方式。然后在第 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》讲了什么?的更多相关文章
- 使用TypeScript拓展你自己的VS Code!
0x00 前言 在前几天的美国纽约,微软举行了Connect(); //2015大会.通过这次大会,我们可以很高兴的看到微软的确变得更加开放也更加务实了.当然,会上放出了不少新产品和新功能,其中就包括 ...
- IDEA/Eclipse简易化使用的几个技巧
IDEA 易用性计较 代码自动提示,取消大小写限制 Ctrl+/生成的"//" 注释,不能跟代码块自动对齐 Eclipse 优化技巧目录 1.更改编码,统一全局的字体编码格式 2. ...
- 比较windows phone程序启动和android程序启动原理
windows phone 程序是如何启动的了,他和android程序有什么区别,我们重点从native code 层面来分析 在windows phone 程序启动的时候是: 在XAML中使用应用程 ...
- 使用TypeScript拓展你自己的VSCode
转自:http://www.iplaysoft.com/brackets.html使用TypeScript拓展你自己的VSCode! 0x00 前言在前几天的美国纽约,微软举行了Connect(); ...
- Mybatis原理和代码剖析
参考资料(官方) Mybatis官方文档: https://mybatis.org/mybatis-3/ Mybatis-Parent : https://github.com/mybatis/par ...
- Solution -「SPOJ-VCIRCLES」Area of Circles
\(\mathcal{Description}\) Link. 求平面上 \(n\) 个圆的并的面积. \(n\le50\),可能被圆覆盖的横纵坐标区域在 \([-10^4,10^4]\) ...
- 第13讲 | 套接字Socket:Talk is cheap, show me the code
第13讲 | 套接字Socket:Talk is cheap, show me the code 基于 TCP 和 UDP 协议的 Socket 编程.在讲 TCP 和 UDP 协议的时候,我们分客户 ...
- 转: Source Code Lookup in Eclipse(主要讲的是java的)
Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
随机推荐
- YII 框架使用之——创建应用
linux环境为UBUNTU14.04,YII框架的版本是1.1.17 将下载的YII解压缩,压缩后会有三个文件夹,”demos,requirements,framework”,demos 当然就是演 ...
- CHROME下载地址
Chrome官方独立中文安装包下载地址 一般我们安装Google Chrome浏览器都是访问 http://www.google.com/chrome/?hl=zh-CN 然后下载运行ChromeSe ...
- Django socketio 安装
如果你还没有安装过 gevent,首先需要安装 libevent, 编译安装 libevent 需要安装 Pyhton 开发库. 在Debain上可以运行如下指令: $ sudo apt-get in ...
- php编译安装configure完全配置够日常所用功能
php编译安装configure完全配置够日常所用功能 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/p ...
- 在zend studio 9.* 中使用phpunit进行单元测试
单元测试在用PHP开发大型项目时必备的减少测试难度和提高测试效率的利器,而PHPUnit是php做单元测试时使用范围最广的一个.如果在window系统中开发,就要调用控制台来运行phpunit,非常的 ...
- codeforces D. Long Path
http://codeforces.com/contest/408/problem/D 题意:有一排房间每个房间有两扇门,一扇通往第i+1个房间,另一扇通往第p[i]个房间,(p[i]<=i)然 ...
- Prime Path(poj 3126)
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
- IOS中用模型取代字典的好处
使用字典的坏处 一般情况下,设置数据和取出数据都是用“字符串类型的key”,编写这些key时,编译器不会有任何友情提示,需要手敲 dict[@“name”]=@“Kevin”; NSString *n ...
- c# 循环语句练习题;
1. 求100以内质数的和 2. 兔子问题 3. 九九乘法表: 一行一行打印: 4. 有一张超大的纸: 纸质的厚度是0.01: 对折多少次,可以达到珠峰的高度: 按照8848来计算: ...
- 【调侃】IOC前世今生(转)
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...