汇编小册(二) 嘿!CPU!我要去北京

本文最后更新于10 个月前,文中所描述的信息可能已发生改变。

通常,我们编写高级语言与 CPU 进行通信,如 C、Go 等。但使用这些高级语言,并不代表直接告诉 CPU 你要做的事情。

你准备带家人去北京旅游。用高级语言,就像报名参加了一家旅行社,旅行社会把机票、酒店、餐饮、路线等都给你搞定。如果用汇编语言,你必须单独处理刚才提到的每一件事。也就是说,如果你想要控制计算机执行的每一步操作,就要编写汇编语言了。

汇编语言是计算机中最低级别的抽象,汇编代码仍然是人类可读的。当你第一次看到汇编代码时,你可能不同意我说的“人类可读的”,但我向你保证,它比计算机正在看的要好的多!

抽象是什么意思呢?抽象是高出一层的东西,它使事情更容易做。以方向盘为例,方向盘使驾驶变得简单,你只需左右转动,就可以改变汽车行驶的方向。但是,汽车底盘发生了什么?转向柱、齿轮箱等,都发生了改变。方向盘是它们顶部的抽象层,简化了你的转弯行为。

对应到计算机中,方向盘就是汇编代码,而转向柱、齿轮箱和其他隐藏的部件就是机器代码。

机器代码只是一堆数字。计算机只能理解数字,所以我们所做的一切都必须最终转化为数字。CPU读取这些数字,找出要执行的指令以及执行哪些数据。它对于计算机是可读的。

我们喜欢阅读文本,所以汇编是一种基于文本的语言,由代表计算机指令的首字母缩略词组成。

因为它们是文本,所以 CPU 无法直接读取它们。因此,该文本文件通过称为汇编器的东西,转换为计算机可以读取的数字。

汇编语言有多种汇编指令集。这就好像我们都是中国人,但是同一个物品,可以有不同的称呼,例如土豆🥔,有些地方还叫做洋芋或者马铃薯,它们就像不同的汇编指令集。但你可以使用机器代码,跳过这些汇编指令集的恶作剧,但机器代码如下:

11 22 333 44 55 66 0 0

另一方面,指令集看起来如下:

mov r1, r2

(我承认上面的例子的内容是我乱写的,但聪明的你应该理解了我想表达的意思 ^_^)

我知道,mov r1, r2看起来,跟我们今天常用的高级编程语言相比,可读性也不是那么友好。但这比写一堆数字要好得多!

所有编程语言都是高于机器代码的某种抽象级别。不过最后,所有人类编写的代码都必须转换为数字 0 或 1,让 CPU 能够读取。

汇编小册(三) 指令周期
汇编小册(一) CPU