在处理器的解码阶段是否会从汇编语言转换为二进制语言?

在处理器的解码阶段是否会从汇编语言转换为二进制语言?

我是计算机科学的新手,我认为处理器中的 FDEW 循环如下:
1. 获取汇编语言中的指令
2. 解码为二进制语言
3. 执行
4. 写入内存

但我对编译器和解释器中发生的事情感到困惑。编译器不是翻译成二进制语言吗?如果是,为什么需要解码阶段来转换为二进制代码?我想我搞错了。请帮助我更好地理解这些概念。

答案1

是的,编译器“翻译成二进制”……长话短说,每个(相当简单的)操作都有一个数字。这就是二进制操作码(由特定 CPU 类型的编译器生成)。它还具有汇编语言表示- 它更像是一种中间的人类可读的符号表示法,根本不用于执行。

在执行阶段,需要执行一系列处理器内部步骤才能执行每个命令。最明显的部分是启用/禁用每个步骤的某些“数据路径” - 例如将某些寄存器内容“连接”到算术逻辑单元(又称 ALU,它通过使用大型组合逻辑网络进行“加法”等计算)的输入端口,或将 ALU 输出端口连接到寄存器输入。这甚至可能是其中一个操作数来自的同一寄存器。

您会看到,对于每个二进制/汇编语言命令,通常都有多个内部“微代码”步骤要执行。这就是“解码/执行”所做的:它们获取二进制指令字,查找一系列适当的内部步骤(这些步骤会相应地打开/关闭门,就像钟表一样),然后执行它们。

答案2

汇编语言是机器代码的一种人类可读形式。编译器将汇编语言转换为真正的机器代码,以便在处理器上执行。

传递给 CPU 的不是汇编代码而是编译后的机器代码。

你可能会误以为额外的转换步骤与 CPU 架构(x86 或 x86-64)的概念以及实际的 CPU 核心有关微架构。微架构是原始核心硬件可执行的真实代码或指令,x86 架构环绕该核心并转换为核心可以理解的指令。

现代 CPU 的核心和指令集与创建它们的处理器有很大不同,并且在很多情况下,旧指令很慢或者可以以某种方式进行改进。

将核心微架构封装在平台架构中,可让您实现核心改进,而无需向平台公开更改。它为我们提供了一个通用且相对不变的平台,而实际执行步骤可能大不相同。

您看到的步骤是

  1. 编译器:将人类可读的指令(汇编语言、C 语言等)转换为机器代码
  2. CPU 获取机器码并执行
  3. CPU 调度程序将架构指令重写为微架构指令
  4. 执行指令

在使用相同核心和平台架构设计的旧 CPU 上,将跳过步骤 3。

相关内容