首页 > 代码库 > 《CODE》读后笔记——第14~25章

《CODE》读后笔记——第14~25章

  1. 反馈与触发器

    振荡器不需要人的干涉即可自主且不断地实现断开和闭合。所有计算机都靠某种振荡器来使其他部件同步工作。

    当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器。触发器具有记忆性,可以保持信息。

    触发器:

     

    技术分享

    《code》书中常用的电路

     

振荡器

技术分享

技术分享

分频器

技术分享

技术分享

8位行波(异步)计数器

技术分享

技术分享

8-1选择器

技术分享

技术分享

3-8译码器

技术分享

技术分享

 

  1. 字节与十六进制

    看完这一章,个人认为十六进制的出现应该就是为了要简单清晰的表示字节吧。四进制表示就只比二进制缩短了1倍,八进制实现不了8个位组成的字节,二百五十六进制太复杂。

    在十六进制中,两位带符号数若是以 8、9、A、B、C、D、E或F开头则是负数。

  2. 存储器组织

    RAM:随机访问存储器。要注意随机存储和顺序存储的概念区别。

    一般地,谈到存储器时,人们默认为多少字节。谈到线路传输数据时,人们默认为多少位。

    书中提到:因为按照我们的设计方案需要为每位存储器提供9个继电器,那么64K×8的RAM阵列需要将近500万个继电器。此处存疑?选择器和译码器里面使用的继电器没有算在内么?

    存储器是这样组织起来的:

     

    技术分享

  3. 自动操作

    所谓的指令码或操作码是否就是CPU指令集的元素?

    最基础的指令码:Load,Store,Add,Substrate,Halt。Add with carry,Substrate with borrow。Jump,Jump If XXX。进位加和借位减要用到进位锁存器(占1位)。

    当进行减法操作,或进位锁存器的数据输出为 1并且执行进位加法或者借位减法指令时, 8位加法器的进位输入被置为1。当进行加法操作,进位输入被置为0。当进行借位减法操作且进位锁存器的数据输出为0时,说明低位减法产生了借位,因此累加器需要少加一个1,所以进位输入被置为0。

    转移指令相当于强制改变计数器的值等于转移地址。

    零锁存器:输入全部为0时,零标志位置为1。存储指令不会影响零标志位。零标志位只能被加法、减法、进位加法、借位减法指令所影响,它同这些指令中最近一个执行时所设置的值相同。

    技术分享

    控制重复或循环是计算机和计算器的区别。

    处理器有一些组件。已经确定的一个是累加器,它是一个简单的锁存器,用来在处理器内部保存数据。我们所设计的计算机中, 8位反向器和8位加法器一起称作算术逻辑单元或 ALU。ALU只能进行算术运算,主要是加法和减法。在复杂的计算机中,ALU也可进行逻辑运算,如"与"、"或"、"异或"。16位计数器叫作程序计数器PC。

    写代码时最好不要用真实的数字地址,因为它们是会变的。较好的方法是使用标号来指定存储单元,这些标号是简单的单词即可。

     

    书中有一句:曾经有过模拟计算机,但它们正逐渐消失。不知道以后会不会偶遇?

     

    加法器的开发历程:

    技术分享

     

    技术分享

     

  4. 从算盘到芯片

    图灵首先提出了"计算能力"的概念,用以分析计算机可以做到和不能做的事。后续谈到了关于"人工智能"的内容,称作图灵测试法。

    图灵测试:如果电脑能在5分钟内回答由人类测试者提出的一系列问题,且其超过30%的回答让测试者误认为是人类所答,则电脑通过测试。但30%是图灵对2000年时的机器思考能力的一个预测,目前我们已远远落后于这个预测。2014年6月7日是计算机科学之父艾伦·图灵(Alan Turing)逝世60周年纪念日。这一天,在英国皇家学会举行的"2014图灵测试"大会上,聊天程序"尤金·古斯特曼"(Eugene Goostman)首次"通过"了图灵测试。

    冯诺依曼体系结构:计算机内部应该使用二进制;计算机应该具有尽可能大的存储器用于存储程序代码和数据;指令应该在存储器中顺序存放并用 程序计数器来寻址,但也应该允许条件转移,这种设计思想叫做存储程序概念。冯诺依曼体系结构的计算机需要花费大量时间取指令,这是冯诺依曼体系结构的一个瓶颈。

    两个N型半导体中夹一个P型半导体可制成放大器,称作NPN晶体管,对应的三部分分别是集电极(Collector)、基极( Base )和发射极( Emitter )。如图:

    技术分享     技术分享

    制作构成集成电路组件的有2大流行家族:TTL(德州仪器)和CMOS(国家半导体公司)。但却是Intel首次实现了在一块电路板上用集成电路构造一个完整的计算机处理器Intel 4004。

    构造一个振荡器只需要使用石英晶体即可,因为石英晶体具有压电效应。利用这种特性,就可以用石英谐振器取代LC(线圈和电容)谐振回路、滤波器等。

    压电效应:当晶片外加一个变化电场时,晶体会产生机械形变;当极板间施加机械力,晶体内会产生交变电场,这种现象称为压电效应。利用压电效应,当极板外加交变电压时,产生机械形变;机械形变反过来产生交变电场。机械形变振幅较小,晶体振动的频率比较稳定。当外加交变电压的频率和晶体的固有频率相等时,机械振动的振幅急剧增加。

    有三个指标经常用来衡量微处理器:数据 通路位数;时钟频率;寻址能力。但它们不会影响一台计算机的能力。某种意义上所有数字计算机都是相同的。如果一个处理器的硬件能做别的处理器做不了的,那么别的处理器可以用软件实现。处理器根本上的不同是速度!

    计算机的发展历程跟贝尔实验室有很大关系,而贝尔实验室的初衷只是为了做电话通讯,贝尔发明了电话。上网搜了一下,贝尔实验室现在竟然归诺基亚技术分享了。目瞪口呆!当然还有IBM发家是靠卖卡片的。晶体管发明人之一Shockley离开贝尔实验室去了加利福尼亚创办了第一家相关公司,然后就有了硅谷。

    计算机发展历史总结(via:http://blog.sina.com.cn/s/blog_7155b61b0100p8vj.html)

时间

事件

详情

1833

查尔斯·巴贝芝(英)设计解析机(并未亲自制造出来)。

解析机是19世纪最接近计算机的发明。设计中包含一个存储系统和运算器,最精华的部分是可以用卡片编程,并且可以进行条件转移指令。巴贝芝被誉为现代计算机的先驱。

1890

赫曼·霍勒瑞斯(美)设计制造制卡机。

制表机的发明主要是为了方便10年一次的全美人口普查,而发明者霍勒瑞斯本人就是1880年人口普查的统计员。该机器在1890年人口普查中大获成功,1896年他成立制表机公司,该公司1924年改名为国际商用机器公司(IBM)。

1935

康拉德·楚泽(德)设计制造第一台继电器计算机Z-1。

楚泽是公认的机电计算机之父,设计Z-1时他还是一名工程系的学生。Z-1采用的是二进制,可用电影胶片编程。楚泽用一生时间不断的对他的发明进行改进。

1943

霍华德·艾肯(美)设计制造第一台打制表格的数字计算机Harvard Mark I。

霍华德·艾肯当时是哈弗大学的研究生,因需要某种方法进行大量重复计算,所以与IBM合作,开发计算机。

1943

艾伦·M·图灵(英)等人设计制造真空管计算机Colossus。

Colossus用于破译德军密码。真空管很容易被烧毁,但维护的复杂程度要比继电器小的多。虽然真空管(微秒级)的速度要比继电器(毫秒级)快1000倍,但早期计算机并不十分关注运算速度问题,因为速度瓶颈主要集中于从纸带中读取程序的时间。

1945

摩尔电器工程学校设计制造真空管计算机ENIAC。

ENIAC用了18000个真空管,重30吨,是迄今为止最大的计算机。

1946

冯·诺依曼(匈出生-美国居住)提出存储程序概念。

存储程序概念:将指令顺序存放在存储中并用程序计数器来寻址,但同时也应允许条件转移。存储程序概念是一个革命性的思想,今天被称作冯·诺依曼体系结构,是现代计算机设计基础。但冯·诺依曼体系结构也有缺点,那就是要花大量时间从存储器中取指令到CPU处来准备执行,称冯·诺依曼瓶颈。

1948

克劳德·香农(美)在贝尔实验室期间提出"位"的概念,并确立了"信息理论"的研究领域。

信息理论涉及在噪声(经常阻碍信息传送)存在的情况下传送数字信息以及如何进行信息补偿等问题。

1947

威廉·邵克雷(美)、约翰·巴顿(美)和沃特·布拉顿(美)在贝尔实验室发明晶体管。

晶体管是20世纪最伟大的发明,三人因此获得1956年诺贝尔物理学奖。半导体是指其导电性可由多种方法来控制,它由锗、硅等纯半导体掺杂杂质制成。其作为逻辑开关的原理与继电器、真空管一样,但它的响应速度是纳秒级的,而且其使用寿命也足够的长。

1958

罗伯特·诺伊斯(美)和杰克·基尔比(美)同时发明集成电路。

集成电路(又称芯片、IC)依靠的是一种能在一个硅片上造成许多晶体管、电阻及其他电子组件的方法。

1965

戈登·E·摩尔(美)发现摩尔定律。

摩尔定律:每过18个月(一年半)可以集成到一块芯片上的晶体管数量都翻一番。

1971

Intel公司研制Intel4004,第一个"芯片上的计算机"(微处理器)。

Inter公司由罗伯特·诺伊斯和戈登·E·摩尔建立。前者发明了集成电路,后者发现了摩尔定律。Intel4004奠定了微处理器的三个主要参数,即数据宽度、时钟频率和寻址范围,这三个参数粗略的说明了处理器的运行速度。

 

  1. 两种典型的微处理器

    1974年4月,Intel推出了8080;1974年8月,Motorola推出了6800。

    技术分享 技术分享

     

     

     

     

     

  2. ASCII码和字符映射

    使打印头回到开始处,以便从纸的左边开始打印下一行,是回车。移动打印头紧接至刚完成的那一行的下一行,是换行。

    BCD码:又称二-十进制代码。这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。最常用于会计系统的设计里,相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。常见BCD编码有8421BCD码,2421BCD码,余3码。

    美国信息交换标准代码,简写为ASCII码,在"技术"上是7位编码,但普遍按1个字节存储。因此有扩展的ASCII字符集,最高位是1。

    技术分享

    ANI A, DFh:除了从左边数第3位被置成0。把这个位设置为0也即把ASCII码表示的小写字母转换成大写字母。很巧妙!

    根据公开的ASCII码标准,10个ASCII码代码(40h、5Bh、5Ch、5Dh、5Eh、60h、7Bh、7Ch、7Dh和7Eh)可用来重新定义而为某一国家使用。另外,如果需要,数字符号( #)可用英镑符号(£)替换,美元符号( $)可用通用货币符号(¤)替换。

    ASCII码是单字节字符集,最多表示256个字符。为了表示更多字符,有了双字节字符集,有了Unicode,可以表示65536个字符。同时Unicode兼容ASCII码。

    关于Unicode和UTF-8的讨论:https://www.zhihu.com/question/23374078

    GB2312、GBK、GB18030 这几种字符集的主要区别是什么?https://www.zhihu.com/question/19677619

  3. 总线连接

     

     

     

     

     

     

     

     

     

     

  4. 操作系统

     

     

     

     

     

     

     

     

     

     

     

  5. 定点数和浮点数

     

     

     

     

     

     

     

     

     

     

     

     

     

  6. 高级语言和低级语言

     

     

     

     

     

     

     

     

  7. 图形化革命

     

     

     

     

     

     

《CODE》读后笔记——第14~25章