该文章是阅读《编码:隐匿在计算机软硬件背后的语言》一书之后整理出的读书笔记。若有错误,还需继续修正与增删。
作者Charles Petzold是Windows编程界的大师,当今世界顶级技术作家。
他是WindowsGDI程序设计首席技术作家,其大作Programming Windows(Windows程序设计)是尽人皆知的Windows编程经典。
这是一本讲述计算机工作原理的书。读者可以通过本书获得对计算机工作原理较深刻的理解这种理解的深度不逊于*“电气工程师”与“程序员”*的理解。
一系列被有机结合起来的零星知识,所涉及的问题包括计算机体系结构、汇编语言及数字电子技术等。
编码是一种用来在机器和人之间传递信息的方式。编码就是交流。
莫尔斯码又称二进制码(Binary Code),它的组成元素只有两个——“点”和“划”。点、划的组合可以表示你想要的任意数目的码字。
码 字 的 数 目 = 2 “ 点 ” 和 “ 划 ” 的 数 目 = 2 编 码 的 位 数 码字的数目 = 2^{“点”和“划”的数目}=2^{编码的位数} 码字的数目=2“点”和“划”的数目=2编码的位数
布莱叶盲文的工作方式 ——> 编码的一些性质
电在计算机中的工作原理——电学
二进制码与电气电路之间的相似性将起到很大作用。
电路
Solution:继电器
今天的全球性即时通信融合了两点:即时通信与远距离通信。在19世纪早期,为了实现以上两点的融合,电报以及继电器应运而生。
十进制
其它进制,八进制、四进制、二进制。
二进制中的一位(bit)称为1比特,我们可用它表达简单的信息:是或不是,亮或灭,打开或关闭。而事实上只要信息能转换成两种或多种可能性的选择,都可以用比特来表示(胶卷的胶片速度、条形码)。
布尔代数:一种数学形式来描述逻辑
AND | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
OR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
NAND | 0 | 1 |
---|---|---|
0 | 1 | 1 |
1 | 1 | 0 |
NOR | 0 | 1 |
---|---|---|
0 | 1 | 0 |
1 | 0 | 0 |
XOR | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
串 联 = A N D 串联=AND 串联=AND
并 联 = O R 并联=OR 并联=OR
逻辑门(logic gate):继电器的组合,用电路去模拟基本逻辑任务
搭建计算两个数加和的器件是搭建一台计算机的基础。
+加法 | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
+进位 | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
半加器(Half Adder)(没有将之前一次加法可能产生的进位位纳入下一次运算)
全加器(Full Adder)(包括进位输入)
加法和减法在某些方面互相补充,但是在机制上二者却存在本质区别 ——> 把减法变成加法
利用补数,我们将不会再用到减法。(以1开头的每个二进制数都表示一个负数)
有符号数与无符号数
记忆力:一个能计数的电路必定需要触发器。
8位的数据流,即数据路径的位宽为8。
存储器:记录信息
3-8译码器
读/写存储器(read/write memory)或随机访问存储器(Random Access Memory,RAM)
增加1个数据输入:8x2RAM阵列
增加1个地址端口:16x1RAM阵列
R A M 阵 列 的 存 储 容 量 = 2 地 址 端 口 的 数 量 RAM阵列的存储容量=2^{地址端口的数量} RAM阵列的存储容量=2地址端口的数量
10个地址端口,8个Data In和Data Out:1024x8RAM阵列
控制面板
1 安 字 节 = 2 10 批 字 节 = 2 20 太 字 节 ( T ) = 2 30 吉 字 节 ( G ) = 2 40 兆 字 节 ( M ) = 2 50 千 字 节 ( K ) = 2 60 字 节 1安字节=2^{10}批字节=2^{20}太字节(T)=2^{30}吉字节(G)=2^{40}兆字节(M)=2^{50}千字节(K)=2^{60}字节 1安字节=210批字节=220太字节(T)=230吉字节(G)=240兆字节(M)=250千字节(K)=260字节
1 安 字 节 ≈ 1 0 3 批 字 节 ≈ 1 0 6 太 字 节 ( T ) ≈ 1 0 9 吉 字 节 ( G ) ≈ 1 0 12 兆 字 节 ( M ) ≈ 1 0 15 千 字 节 ( K ) ≈ 1 0 18 字 节 1安字节\approx10^{3}批字节\approx10^{6}太字节(T)\approx10^{9}吉字节(G)\approx10^{12}兆字节(M)\approx10^{15}千字节(K)\approx10^{18}字节 1安字节≈103批字节≈106太字节(T)≈109吉字节(G)≈1012兆字节(M)≈1015千字节(K)≈1018字节
怎样让加法器自动地完成数据输入和计算?
编写程序。
机器所需要的仅仅是能够做加减法的硬件以及利用条件跳转指令执行代码的方法。
本书中不讲有关**算法(algorithm)**的内容。
计算工具的发展史
将中央处理器的所有构件封装到一块硅芯片上,即微处理器。
两种典型微处理器:Intel 8080和Motorola 6800
助记符 | 指令含义 |
---|---|
LOD | 加载 |
STO | 保存 |
STA | 保存到累加器 |
LDA | 加载到累加器 |
STAX | 保存到BC或DE寄存器 |
LDAX | 加载到BC或DE寄存器 |
MOV | 把一个寄存器中的内容转移到另一个寄存器(可以是原来的寄存器、累加器) |
MVI | 传送立即数 |
HLT | 停止 |
ADD | 加法(累加器) |
ADC | 进位加法(累加器) |
SUB | 减法(累加器) |
SBB | 借位减法(累加器) |
AND | 与 |
OR | 或 |
XOR | 异或 |
CMP | 比较,可设置标志位 |
ADI | 立即数加法 |
ACI | 立即数进位加法 |
SUI | 立即数减法 |
SBI | 立即数借位减法 |
ANI | 立即数与 |
XRI | 立即数异或 |
ORI | 立即数或 |
CPI | 立即数比较 |
STC | 令CF置1 |
CMC | 令CF取反 |
CMA | 累加器中的数按位取反 |
DAA | 十进制调整累加器,使用BCD码进行十进制的算术运算 |
INR | 寄存器或存储器中的数加1 |
DCR | 寄存器或存储器中的数减1 |
RLC | 使累加器循环左移 |
RRC | 使累加器循环右移 |
RAL | 带进位的累加器循环左移 |
RAR | 带进位的累加器循环右移 |
PUSH | 压入堆栈 |
POP | 弹出堆栈 |
LXI | 对寄存器对和堆栈指针加载扩展的立即数(两个字节) |
INX | 对寄存器对和堆栈指针加1 |
DCX | 对寄存器对和堆栈指针减1 |
DAD | 把由任意2个寄存器组成的16位寄存器对的内容加到寄存器对HL中 |
SHLD | 直接保存HL中的数据 |
LHLD | 直接加载数据到HL |
PCHL | 将HL保存的数据加载到程序计数器 |
SPHL | 将HL保存的数据加载到堆栈指针 |
XTHL | 把HL中的内容和堆栈顶部2个字节进行交换 |
XCHG | 把DE中的内容和HL中的内容进行交换 |
JMP | 转移 |
JZ | 零转移 |
JNZ | 非零转移 |
JC | 进位转移 |
JNC | 无进位转移 |
CALL | 调用 |
RET | 返回跳转点 |
OUT | 把累加器中的内容写入到紧跟该指令后的字节所寻址的端口 |
IN | 把一个字节从端口读入到累加器 |
DI | 禁止中断 |
EI | 允许中断 |
RST | 重新启动,立即跳转到特定的地址 |
NOP | 无操作 |
实现人机交互:输入/输出设备(I/O)
如何用比特来存储文本呢?
ASCII码。
总线(bus)就是数字信号的集合,而这些新好呗提供给计算机上的每块电路板。
M i c r o p r o c e s s o r + R A M + K e y b o a r d + V D + D i s k D r i v e r Microprocessor+RAM+Keyboard+VD+Disk Driver Microprocessor+RAM+Keyboard+VD+DiskDriver
MISSING:软件
键盘处理程序及命令处理程序简化了工作,淘汰了控制面板。同时命令处理程序使得计算机变得可交互(interactive)。
文件系统(file system)可以记录存储位置。
0000h | 系统参数 |
---|---|
0100h | 临时程序区域(TPA) |
控制台命令处理程序(CCP) | |
基本磁盘操作系统(BDOS) | |
最高地址 | 基本输入/输出系统(BIOS) |
命令 | 内容 |
---|---|
DIR | 显示磁盘的目录信息 |
ERA | 删除磁盘中的文件 |
REN | 改变文件名 |
TYPE | 显示文本文件的内容 |
SAVE | 保存文件 |
OS提供应用程序接口(API),让程序能够方便地访问计算机的硬件。API是一个与设备无关(device-independent)的接口,它屏蔽了硬件之间的差异。
2.75用二进制怎样表示呢?
浮点数运算可以处理一些较为繁杂的函数运算,如平方根、指数、对数和三角函数。
使用机器码(低级语言)编写程序如同用牙签吃东西,费力又费时;人们想出了一种效率更高的编程方法——高级语言。
低级语言:汇编语言
高级语言
第一个编译器——A-0
最古老的高级语言——FORTRAN
ALGOL
程 序 设 计 : 科 学 o r 艺 术 ? 程序设计:科学or艺术? 程序设计:科学or艺术?
第一个商务系统所使用的程序设计语言——COBOL
IBM PL/I
BASIC
Pascal
Ada
C
所有的类ALGOL语言设计模式都是基于冯·诺依曼计算机体系的。此类语言进行改进后产生了主要应用在图形化操作系统中的面向对象程序设计语言。
要充分利用计算机日益增长的运算和处理能力,就必须不断改进计算机系统中的用户接口(User Interface),它是人机交互的轴心。图形化革命
《思维之际》与麦克斯存储器(Memex)
用户界面(User Interface)
从字符显示到图形显示
软件之所以被设计出来,其最终目的是——《为了扩展人类的智慧》。
Alto——图形用户界面(GUI)
麦金托什机(Macintosh)——Mac OS
Windows
面向对象程序设计思想(OOP)
集成开发环境(IDE)
可视化教程(Visual Programming)
位图和图元文件都是数字化的可视信息。
音频信息也能转换成比特和字节。
CD可以存储声音,也可以存储数据。(CD-ROM)
把波形数据转换成ASCII码称为语音识别,是一个极其复杂的过程。从本质上来讲这是一个利用编程技术使得计算机“理解”人类语言的过程,这正是人工智能(Artificial Intelligence)所研究的领域。
与万·布什提出的概念不同,所有信息并不一定要触手可及,真正使它们达到信息共享的做法是计算机互联,这样做还可以更有效地利用存储空间。
兼容性
安全性
Java
光 子 的 速 度 无 与 伦 比 光子的速度无与伦比 光子的速度无与伦比
2019/9/24 9:24完成编辑