《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>,是前一天晚上才定的,中午花了半小时准备了下 ...
随机推荐
- shell脚本获取mysql插入数据自增长id的值
shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...
- [Android分享] 彻底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi
来自: http://www.eoeandroid.com/thread-565562-1-1.html?_dsign=42bed080 非常感谢楼主分享 这个问题我相信困惑了好多人包括很多老鸟,而且 ...
- django笔记1
最近在博客园看来越来越多的关于python的文章,我看到时感觉特别的好,因为我也是一个特别喜欢python这门语言,喜欢python的简洁.干净,简洁而不失强大. 最近在学习django的Model模 ...
- EasyUI篇のDataGrid
HTML: <table id="dg"></table> 或者 <div id="dg"></div> JS: ...
- C#窗体程序画倾斜一定角度的椭圆
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Linux下软件的安装
想必linux新手刚开始对于linux软件安装很茫然吧,不知到怎么安装,软件到底安装在哪里,如果我需要删除软件怎么删除,配置文件到哪里去找. 想学习linux的话,最快上手的应该是Ubuntu,它特有 ...
- 如何重载ComboBox 使其下拉按钮(带下箭头的)和下拉列表的垂直滚动条的宽度改变?(自绘ComboBox) [转]
原文地址:http://bbs.csdn.net/topics/390135022 http://blog.csdn.net/scsdn/article/details/4363299 想使用winf ...
- 通过 IDE 向 Storm 集群远程提交 topology
转载: http://weyo.me/pages/techs/storm-topology-remote-submission/ http://www.javaworld.com/article/20 ...
- python operator模块
官网:https://docs.python.org/3.4/library/operator.html http://pymotw.com/2/operator/
- hibernate 3.* C3P0配置 以及为什么需要连接池!
Hibernate自带的连接池算法相当不成熟. 它只是为了让你快些上手,并不适合用于产品系统或性能测试中. 出于最佳性能和稳定性考虑你应该使用第三方的连接池.只需要用特定连接池的设置替换 hibern ...