10、动态链接:程序内部的“共享单车”

我们之前讲过,程序的链接,是把对应的不同文件内的代码段,合并到一起,成为最后的可执行文件。这个链接的方式,让我们在写代码的时候做到了“复用”。同样的功能代码只要写一次,然后提供给很多不同的程序进行链接就行了。 这么说来,“链接”其实有点儿像我们日常生...

深入浅出计算机组成原理

11、二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?

上算法和数据结构课的时候,老师们都会和你说,程序 = 算法 + 数据结构。如果对应到组成原理或者说硬件层面,算法就是我们前面讲的各种计算机指令,数据结构就对应我们接下来要讲的二进制数据。 众所周知,现代计算机都是用0和1组成的二进制,来表示...

深入浅出计算机组成原理

12、理解电路:从电报机到门电路,我们如何做到“千里传信”?

我们前面讲过机器指令,你应该知道,所有最终执行的程序其实都是使用“0”和“1”这样的二进制代码来表示的。上一讲里,我也向你展示了,对应的整数和字符串,其实也是用“0”和“1”这样的二进制代码来表示的。 那么你可能要问了,我知道了这个有什么用呢?毕竟我...

深入浅出计算机组成原理

13、加法器:如何像搭乐高一样搭电路(上)?

上一讲,我们看到了如何通过电路,在计算机硬件层面设计最基本的单元,门电路。我给你看的门电路非常简单,只能做简单的 “与(AND)”“或(OR)”“NOT(非)”和“异或(XOR)”,这样最基本的单比特逻辑运算。下面这些门电路的标识,你需要非常熟悉,后...

深入浅出计算机组成原理

14、乘法器:如何像搭乐高一样搭电路(下)?

和学习小学数学一样,学完了加法之后,我们自然而然就要来学习乘法。既然是退回到小学,我们就把问题搞得简单一点,先来看两个4位数的乘法。这里的4位数,当然还是一个二进制数。我们是人类而不是电路,自然还是用列竖式的方式来进行计算。 十进制中的13乘以9,计...

深入浅出计算机组成原理

15、浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?

在我们日常的程序开发中,不只会用到整数。更多情况下,我们用到的都是实数。比如,我们开发一个电商App,商品的价格常常会是9块9;再比如,现在流行的深度学习算法,对应的机器学习里的模型里的各个权重也都是1.23这样的数。可以说,在实际的应用过程中,这些...

深入浅出计算机组成原理

16、浮点数和定点数(下):深入理解浮点数到底有什么用?

上一讲,我们讲了用“浮点数”这样的数据形式,来表示一个不能确定大小的数据范围。浮点数可以大到$3.40×10^{38}$,也可以小到$1.17×10^{-38}$这样的数值。同时,我们也发现,其实我们平时写的0.1、0.2并不是精确的数值,只是一个近...

深入浅出计算机组成原理

17、建立数据通路(上):指令+运算=CPU

前面几讲里,我从两个不同的部分为你讲解了CPU的功能。 在“指令”部分,我为你讲解了计算机的“指令”是怎么运行的,也就是我们撰写的代码,是怎么变成一条条的机器能够理解的指令的,以及是按照什么样的顺序运行的。 在“计算”部分,我为你讲解了计算机的“计算...

深入浅出计算机组成原理

18、建立数据通路(中):指令+运算=CPU

上一讲,我们看到,要能够实现一个完整的CPU功能,除了加法器这样的电路之外,我们还需要实现其他功能的电路。其中有一些电路,和我们实现过的加法器一样,只需要给定输入,就能得到固定的输出。这样的电路,我们称之为组合逻辑电路(Combinational L...

深入浅出计算机组成原理

19、建立数据通路(下):指令+运算=CPU

上一讲,我们讲解了时钟信号是怎么实现的,以及怎么利用这个时钟信号,来控制数据的读写,可以使得我们能把需要的数据“存储”下来。那么,这一讲,我们要让计算机“自动”跑起来。 通过一个时钟信号,我们可以实现计数器,这个会成为我们的PC寄存器。然后,我们还需...

深入浅出计算机组成原理
12347