《编码-隐匿在计算机软硬件背后的语言》学习笔记

2 编码与组合

莫尔斯码被称为二进制码(Binary Code),因为这种编码的组成元素只有两个——“点”和“划”。

3 布莱叶盲文与二进制码

布莱叶盲文使用6个点来表示,一共可以表示 2 6 = 64 2^6=64 26=64种码字数。

使用数字标识符和取消“数字标识状态”来进行“换挡”,它们改变着作用域内编码的含义,直到作用域结束。

类似这样的编码被称为“逃逸码(escape code)逃逸码让你“逃离”对编码串单调的、一成不变的解析,而转入一种新的解析方式中。在使用二进制码对书面语言进行编码时,换挡码和逃逸码是相当常见的。

4 手电筒的剖析

一个电路就是一个环路。

欧姆定律: I = E / R I=E/R I=E/R

瓦特计算: P = E × I P=E×I P=E×I

5 绕过拐角的通信

简单版双向电报系统由两组连接灯泡的电池加上开关组成。

6 电报机与继电器

电键、发声器、电池还有一些导线构成了一个电报机。电报机标志着现代通信的开始。

8 十的替代品

我们现在所用的数字系统是基于10的,或称为十进制。

十进制的计数方式是:0、1、2、3、4、5、6、7、8、9

八进制的计数方式是:0、1、2、3、4、5、6、7

人们在使用二进制数的时候通常将它们写成带有前导零的形式,比如11写成0011。

二进制数与计算机之间有着紧密的联系。

9 二进制数

比特(bit)被看做是组成信息块的基本单位。

任何小于1比特的内容都根本算不上是信息。

在二进制中,可能有的编码数等于2的整数次幂。

UPC(通用产品编码)就是基于比特,基本每个商品都有自己的UPC码。

比特可以用来表示莫尔斯编码。

10 逻辑与开关

布尔代数中,操作数不是数字而是类(class),一个类就是一个事物的群体,也被称为集合(set)。

  • 符号+(并集)用OR表示。
  • 符号×(交集)用AND表示。
  • 符号1-(全集中去掉某些元素)用NOT来表示。

11 门

“与门”,只有当所有开关都闭合时输出才有电压。

“或门”,任何一端闭合输出就有电压。

“反向器”,开关闭合无电压,开关断开有电压。

“或非门”,只有在任何一端都没电压时为1。

“与非门”,只有在任何一端都有电压时才为0。

“缓冲器”,输入和输出是同频的。

12 二进制加法器

“异或门”,两端都为0或1时输出0,只有一端为1时输出1。

二进制加法,通过一个进位位和加和位来处理。

“半加法器”和“全加法器”。

半加法器由一个异或门和一个与门组成,需要8个继电器。全加法器由两个半加法器和一个或门组成,需要18个继电器。

这种加法器使用的是“行波进位(ripple carry,或脉冲进位)。更快的加法器运用了一个被称为”前置进位“的电路来提高运算速度。

现代计算机已经不再使用继电器了,取而代之的是晶体管,晶体管要比继电器计算速度更快、体积更小,而且噪声更弱、耗能更低,而且更便宜。

13 如何实现减法

减法不使用借位,十进制减法,当被减数大于减数时,采用先算出减数的9的补数,在加上被减数+1,最后减1000,就免去了借位。

在二进制减法中,1的补数可以使用反码或相反数代替。

14 反馈与触发器

振荡器,电路的输出接连交替,当输出为1时,输入为0,当输出为0时,输入为1。振荡器不需要人为干预就可以工作。

触发器,接通上面的开关,灯泡被点亮,断开此开关灯泡依然亮着;接通下面的开关,灯泡被熄灭,断开此开关灯泡仍然不亮。

2022_06_19_IMG_6149

15 字节与十六进制

8比特(二进制数)代表1字节(byte)。八比特可以表示255种,相当于八位二进制。

16 存储器组织

存储器的职责和作用是保证数据先存储后访问。

锁存器也被称为读/写存储器(read/write memory),但更普遍的叫法是随机访问存储器(Random Access Memory),或RAM。

2022_06_21_IMG_6155

1KB=1024B

1MB=1024KB

1GB=1024MB

1TB=1024GB

随机访问存储器被称为易失性存储器。

17 自动操作

指令码或操作码指示电路执行某些操作。

能否控制重复操作或者循环是计算机和计算器的区别。

一台数字计算机主要由4部分构成:处理器(processor)、存储器(memory),至少一个输入(input)设备和一个输出(output)设备。

计算机程序设计有时也被称为编写代码(writing code),或编码(coding)。

能够被处理器响应的操作码(比如Load指令和Store指令的代码10h和11h),称做机器码(machine codes),或机器语言(machine language)。

汇编语言,它是全数字的机器语言和指令的文字描述的一种结合体。

18 从算盘到芯片

真空管(vacuum tube)是一种可以替代继电器的原件。真空管状态转变的速度比继电器要快1000倍。

晶体管发明于1947年12月16日的贝尔实验室。

继电器、真空管以及晶体管最初都是为了开发放大器设计的,但是通过相似方式连接可以组成逻辑门,而计算机则是由这些部件构成的。

影响一个集成电路性能的最重要因素是传播时间,也就是输入端发生变化引起输出端发生相应变化所需要的时间。

芯片家族(集成电路)分为TTL(transistor-transistor logic)晶体管-晶体管逻辑和CMOS(complementary metal-oxide semiconductor)互补金属氧化物半导体。

4位处理器,意味着数据通路宽度只有4位,每次做加、减运算时,它只能处理4位的数字。

处理器的时钟频率是指连接到微处理器并驱动它运行的最大频率,超过此时钟频率,微处理器将不能正常工作。

图灵说:所有的数字计算机都是相同的,如果一台处理器从硬件上无法做到另外一台可以做到的事情,那么它可以通过软件途径做到,最终它们可以完成相同的事情。

最大时钟频率(maximum clock speed),也称为主频,是影响处理器速度的决定性因素之一。时钟频率决定了执行一条指令所需要的时间,处理器的数据位宽也影响处理器的速度。

19 两种典型的微处理器

英特尔与1974年推出的8080芯片和摩托罗拉6800芯片,被称为“单芯片微处理器”。

一个微处理器通常由多个用来寻址存储器的输出信号。用于寻址的输出信号的数目与微处理器的可寻址空间大小直接相关。

LDA A, [aaaa]
MOV B, [HL]

第一种称为直接寻址(direct addressing),第二种称为间接寻址(indexed addressing)。

微处理器与外围设备(鼠标键盘显示器等)也是通过对应的特定地址进行读写操作。

晶体管的增加了为了适应处理器不断增加的数据宽度——从4位、8位、16位、32位到64位,还有一些晶体管用来应对新的指令。

20 ASCII码和字符转换

数字计算机中的存储器唯一可以存储的是比特。

将文本表示为数字形式,需要构建一种系统来为每一个字符赋予一个唯一的编码。具有这种功能的系统被称为字符编码集(Coded Character Set),系统内的每个独立编码称为字符编码(Character Codes)。

美国信息交换标准码(American Standard Code Information Interchange),简称ASCII码。

ASCII码是7位编码,它的二进制取值范围为00000001111111,对应于十六进制是00h7Fh。ASCII码前95个编码被称为图形文字,它们可以显示出来。剩下的33个为控制字符,它们用来执行某一特定功能。尽管ASCII码从技术的本质上来看是7位编码,但仍以8位的形式存储。

回车符是回到最左转,换行符是跳到下一行。

1988年,Unicode编码出现了,采用16位编码,一个字符2个字节,Unicode编码前128个字符和ASCII码一致,Unicode编码在存储空间上付出了相应的代价。

21 总线

RAM(随机访问存储器)存放着处理器要执行的机器代码指令。RAM是一种易失性存储器,当掉电的时候内容就会丢失。

存储单元的地址和地址中的内容两者是不一样的。前者是存储单元的编号,表示存储器总的一个位置,而后者表示这个位置里存放的数据。

总线(bus)是数字信号的集合,这些信号被提供给计算机上的每块电路板,信号分为四类:

  • 地址信号。这些信号由微处理器产生,通常用来对RAM进行寻址操作。
  • 数据输出信号。这些信号也是由微处理器产生,用来把数据写入到RAM或其他设备。
  • 数据输入信号。这些信号由计算机的其他部分提供的,并由微处理器读取。
  • 控制信号。这些信号多种多样,通常与计算机内所用的特定的微处理器相对应。控制信号可以产生于微处理器,也可以由与微处理器通信的其他设备产生。

总线还可以为计算机上不同电路板供电。

DMA(直接存储器访问)可以让其他设备不通过微处理器而获得总线的控制权,进而直接对内存进行读写。

ROM(只读存储器),它是一种集成电路,在生产时里面已经填入了数据,固定的地址输出是不变的。ROM没有数据输入信息。

640×480是视频分辨率的最低标准,它出现于1987年,由IBM的PS/2和苹果公司的Macintosh Ⅱ机所采用。

磁介质存储器(magnetic storage)是一种长期存储器,代替打孔卡片和纸带。

磁带也是一种长期存储介质,但它的缺点是无法快速的移动到任意一个位置。

磁盘要早于磁带,1956年,IBM公司发明了世界首款用来存储计算机数据的磁盘驱动器,称为RAMAC(Random Access Method of Accounting and Control,计算与控制过程中的随机访问模式)。磁盘分为软盘(floppy disk)和硬盘(hard disk,或fixed disk)。

软盘是由单面覆盖磁性物质的塑料片组成,外面由厚纸板或塑料包装,软盘必须插入到软盘驱动器中使用;硬盘是由多个金属磁盘构成,它永久驻留在驱动器里,相对软盘,它的速度更快、存储量更大,缺点是固定,不能移动。

存储信息是否易失,是随机访问存储器与磁介质存储器的主要区别。

微处理器不能直接从磁盘读取数据,需要将所需的数据从磁盘调入内存,然后它才能对其访问。

22 操作系统

8位二进制数可以表示两位十六进制数。

内存地址在计算机中的存储单位是1字节=8比特。内存地址是人类从电路里面抽象出来的给人识别的,而不是给机器识别的,它本质上是一个数据选择器。

计算机把内存中的数据写入到磁盘驱动器,然后再把数据读回到内存中。

操作系统(operating system)是许多软件构成的庞大程序集合,文件系统是其中的一部分。

文件系统可以把一个大文件分散存储在不连续的磁盘上。

BIOS(Basic Input And Output System,BIOS)中的一些子程序。BIOS可以对硬件进行访问,比如键盘、视频显示器和磁盘驱动器等。

CP/M是8080微处理器中非常流行的操作系统,曾经辉煌一时,至今仍有重要的历史意义。

DOS(Disk Operating System)磁盘操作系统,是早期个人计算机上的一类操作系统。

23 定点数和浮点数

定点格式(fixed-point format),“定点”是指小数点的位置总是在数的某个特定位置,它位于两位小数之前。

浮点格式(floating-point notation),浮点格式基于科学计算法(例如 4.9 × 1 0 9 4.9×10^9 4.9×109),它是存储极大或极小树的理想方式。

24 高级语言与低级语言

使用汇编语言编写程序要比使用机器语言简单得多,但微处理器并不能解释汇编语言。

每当一种新的微处理器面世,就需要为其编写新的汇编器。然而,新的汇编器可以在已有的计算机上编写,并利用其汇编器进行汇编,这种方式称为交叉汇编(cross-assembler)。

汇编语言的两个问题,第一个是使用汇编语言非常乏味,因为这是在微处理器芯片级的编程,因此不得不考虑每一个微小的细节;第二个问题是不可“移植”(portable)。汇编语言属于低级语言(low-level programmming language),因为它与计算机硬件的关系相当紧密。

编译器(compiler),编译器可以将高级语言的程序语句转换成机器码指令。编译器实现过程要比汇编器更加复杂,汇编语言的语句和机器码是一一对应的,而一般的高级语言不具备这种对应关系,编译器通常必须把一条语句转换多个机器码指令,编译器的编写非常复杂。

高级语言的优点是比汇编语言易于学习并且更容易编写程序,高级语言不依赖于特定的处理器,因此它们通常具有良好的可移植性。使用高级语言的程序员不再需要关心最终运行程序的计算机的底层结构。

汇编语言的优点是汇编程序员所编写的程序比编译器所产生的代码更加有效率,但这种差距已经变得不明显了,因为微处理器变得更加复杂,而编译器的优化代码方面也更加成熟。汇编语言可以高度利用处理器的功能,因为高级语言必须转化成机器码,所以它只会降低微处理器的能力。现在除了一些特殊的应用场合之外,汇编语言已经很少使用了。

公认的第一个编译器是A-0,它是为UNIVAC开发的编译器,于1952年由雷明顿兰德公司的格瑞斯·穆雷·霍珀开发完成。

任何一种计算机程序设计语言都有其支持者和批评者,而且人们通常只对自己喜欢的语言有热情。

程序设计的更多时候是设计和建造,就像修建一座大桥的过程。

第一个成功地为商务系统所使用的程序设计语言是COBOL(COmmon Business Oriented Language),它于1959年开始开发,它的设计思路受霍珀早期编译器的影响。

虽然FORTRAN、ALGOL、COBOL以及PL/Ⅰ都可以应用于家用计算机,但它们对于小型计算机的影响远没有BASIC语言那么深。BASIC于1964年有达特茅斯大学数学系的约翰·克莫尼和托马斯·克鲁兹开发;BASIC语言不要求程序员指定变量的存储类型;很多BASIC的后续版本都是解释型(interpreter)而不是编译型(complier)。

编译器读取源文件并生成一个可执行文件;而解释器却采用边读边执行的方式,不会产生新的文件。解释器比编译器的原理简单一些,因此更容易编写,但其运行程序的速度要比后者要慢。

1975年,比尔·盖茨和其好友保罗·艾伦为Altair 8800编写了BASIC解释器,同一年他们创建了微软公司。

Pascal程序设计语言继承了ALGOL的大部分结构,同时还继承了COBOL的记录处理功能,它由瑞士计算机科学教授尼尔莱斯·沃思在20世纪60年代末开发完成。

C语言,一种深受喜爱的程序设计语言,C语言主要是由贝尔电话实验室的丹尼斯·M·里奇开发,从1969年开始设计并与1973年开发完成。UNIX操作系统于1973年采用C语言编写成功。

C语言的一个重要特征是对于指针(point)的支持,指针本质是数字化描述的内存地址。C语言中的很多操作与通用处理器的指令非常相似,因此C也被称为高级汇编语言。

所有的类ALGOL语言,即大多数常用程序设计语言,其设计模式都是基于冯·诺依曼计算机体系的。LISP(List Processing)是一种非冯·诺依曼体系程序设计语言,它主要应用于人工智能领域,由约翰·麦卡锡在20世纪50年代末开发完成。APL(A Programming Language)是另一种全新的语言,与LISP完全不同,它同样与20世纪50年代末期,由肯尼斯·艾佛森开发。

类ALGOL语言一直在程序语言领域占据着重要地位,面向对象程序设计(OOP)语言是在此类语言方面的改进版。面向对象语言主要应用在图形化操作系统中。

25 图形化革命

黑白显示器每个像素值赋予1比特内存空间,640×480像素至少需要占据307,200比特的内存,换算过来就是38,400字节。

全色彩显示器,为每个像素点分配3个字节,三原色中的每一种各占一个字节。这种编码模式使红、绿、蓝各自呈现出256种不同的色阶,共有16,777,216种不同的颜色。

鼠标由恩格尔巴特在20世纪60年代中期发明。

集成开发环境(Integrated Development Environment,IDE)集成了所有需要的工具,环境本身可以像其他图形应用程序一样运行,简化了程序开发任务。

可视化编程(Visual Programming),开发人员利用按钮及其他组件可以通过鼠标拖拽进行“排版”,从而达到在窗口交互设计的目的。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值