汇编小册(四) 指令映射到机器代码

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

让我们将一条指令映射到机器代码吧。

还记得我们之前提到的寄存器吗?也就是仓库例子中,放在地上的小隔间。我们稍后会更多地讨论它们,现在我们只需要记住它是可以临时存储东西的地方。

shell
# 将 4 与寄存器 12 中保存的数字相加
add r12, 4;

首先,CPU 去获取指令。在机器代码中,可能最后展示的结果是一串二进制数,如下。

00000001 00001100 00000100

上面这串二进制数字,用十进制表示,如下。

1 12 4

当解码器读取其第一个值时,它会寻找要映射到对应的指令。

数值指令
1add
2sub

现在,假设数字 1 映射到指令 add 。

解码器知道 add 指令的第一个参数是:保存的目的地(哪个寄存器)

第二个参数是:要添加的数

解码器看到下一段数据为 12 ,所以它知道它的保存目的地是寄存器 12( r12 )。然后它获取 r12 中保存的数字,假设寄存器12( r12 )中现在保存了 5。

接下来,解码器获取要添加的数字,即 4 。

最后开始执行。CPU 将存储在寄存器12( r12 )中的数字发送到 ALU,ALU 将这两个数字 4、5 的总和发送回 CPU。CPU 从 ALU 中获取此总和并将其保存到寄存器 12 ( r12 )。完成!

[scode type="green"]现在的 CPU 指令周期不再是一个循环,而是实现了一种称为流水线的东西,即每个指令流,在下一个指令流开始之前结束。

假设有一个传统的制造工厂,其中有一个仓库存放着原材料,工人从仓库中取出原材料,进行各个制造步骤,最终制成产品。在这个工厂中,每个产品的制造需要经历多个阶段,工人们按顺序完成每个阶段的工作。

现在的工人,就是在一个流水线工程,在流水线工厂中,产品制造被拆分为多个阶段,并在不同位置的工人同时进行不同阶段的工作。每个工人只需要专注于自己的工作,然后将产品传递给下一个工人。

用 CPU 术语中来说,现代 CPU 可以同时获取、解码和执行不同的指令。提高了 CPU 的指令处理效率,从而使 CPU 的运行速度更快。[/scode]

汇编小册(五) 电与物理世界
汇编小册(三) 指令周期