代码:隐匿在计算机背后的语言
Contents
一 至亲密友
编码的意思指的是一种用在机器和人之间传递信息的方式
对于人类来说,我们日常说的的语言可称为一种编码:其一为“口头语言”,另一种“书面语言”
如果一种编码用在其他编码无法取代的地方,那它就是一种有用的编码
二 编码与组合
码字的数目 = 2 ^ 编码的位数
三 布莱叶盲文与二进制编码
$ME尽可能的利用编码集内部的每一个可以进行编码的部分,使其具有现实的意义
四 手电筒的剖析
我们所能看到和感觉到的事务——通常下都是由原子构成的,每一个原子由有三种基本粒子构成,分别为:中子、电子、质子。原子之间可以通过化学的方式结合成分子,分子的性质通常与组成它的原子大相径庭。
事实上只要有足够大的电压,任何的物质都是可以导电的
五 绕过拐角的通信
大地有时被认为是零电势点
电压是电能做的功
六 电报机与继电器
电磁现象是一种物理上的现象,专指电流流过电路时在其周围产生磁场的现象。
七 我们的十个数字
数字在最开始产生的时候就是很抽象的
大多数历史学家认为数字最初起源于对事物的计数
阿拉伯数字系统不同于先前的数字系统,体现在一下三点:
- 阿拉伯数字系统是和位置相关的
- 有专门表示数字10的专门符号
- 有表示0的符号
一个多位数中的每一个都有其各自的特定的意义
任何长度的十进制数相加时,只要根据一种方法将问题分成几部即可,而每个步骤最多只是将两个一位数字相加而已
八 十的替代品
在十进制中,10没有特定的符号,因此在八进制中,同样也没有表示8的特定符号
在结果上,八进制数字系统与十进制数字系统并没有什么不同,只是在细节上存在一些差异
二进制数最大的问题是数字用完得很快,二进制数的长度增长得很快而非数值增大得快
在一个多位二进制数中,任何一个以1开头而后面全是0的二进制数一定都是2的整数次幂
人们在使用二进制数的时候通常将他们写成带有前导零的形式
二进制数字系统在算术和电子技术之间架起了一座桥梁
九 二进制数
1比特是可能存在的最小信息量
在通信理论中,噪声是指影响通信效果的所有事物
信息可能是多个可能性中的一种
所有可能被转换成两种或多种可能性的选择的信息,都可以用比特来表示
如果无法用语言、图画或声音来表达某种事物的时候,也就无法将这个信息用比特的形式来编码
利用二进制表示信息的一个额外好处就是我们可以清楚的知道我们是否已经相到了所以的可能性
十 逻辑与开关
亚里士多德认为真理是与逻辑相关的某种事物
当进行传统代数运算的时候,我们会遵循一定的规则。并且它是处理数字的
一个类就是一个事务的群体,它后来也被称为集合
在布尔代中,符号1表示“全集”——也就是我们提到的所有事务。符号0表示空集——不包含任何元素的集合
布尔表达式$F\times(1-F)=0$是矛盾律,其指出事物不可能既是它本身,同时又是它的对立面
十一 门
电子工程师可以运用布尔代数的所有工具去设计开关电路
继电器是通过放大微弱信号来生成强信号的
连接继电器是建立逻辑门的关键
反向器不是逻辑门
两个带有反向输入的与门和或非门是等价的,两个带有反向输入的或门和与非门是等价的
德摩根定律$\overline { A } +\overline { B } =\overline { A+B } $和$\overline { A } \times \overline { B } =\overline { A\times B } $
十二 二级制加法器
加法器主要部分是由各种形式连接起来的逻辑门
异或门:两个输入不相同输出1
同或门:两个输入相同时输出1
半加器:由一个与门和一个异或门构成,来进行两个二进制数的计算和其进位
全加器:两个半加器加上一个或门构成
加法器的总速度等于数字的位数乘以全加器器件的速速,这称为行波进位
十三 如何实现减法
八个异或门组合起来可以形成一个求补器
一般来说,如果两个操作数的符号不同,而结果的符号与操作数的符号不相同,这样的加法就是无效的
十四 反馈与触发器
振荡器的输出在0和1之间安照固有的规律交替变化
振荡器从某个初始状态开始,经过一段时间又回到先前初始状态的这一段间隔定义为振荡器的一个循环(周期)
一个循环所占用的时间就是该振荡器的周期,周期的倒数就是振荡器的频率
十五 字节与十六进制
全世界大部分书面语言的基本字符数都少于256,所以字节是一种理想的保存文本的手段
十六 存储器组织
随机访问存储器也被称为易失性存储器
机器响应指令码做一系列操作的过程称为执行指令,但这并不能表明机器是一种有生命的东西,因为它不能自行分析机器代码并决定该做什么
十八 从算盘到芯片
信息论研究的是数字信息在噪声的情况下传输,以及如何弥补因噪声产生的损失
控制论:表示人类和动物的生物过程同计算机和计算机相关的一切
NPN晶体管:
十九 两种典型的微处理器
寻址方式:一、直接寻址;二、间接寻址;三、立即数寻址
上溢:堆栈不断增大,最终覆盖掉储存器中保存的程序所必须的代码或数据
下溢:过多的使用POP指令,则会过早的读取完堆栈中的数据从而导致出现错误