我是计算机科学的新手,我认为处理器中的 FDEW 循环如下:
1. 获取汇编语言中的指令
2. 解码为二进制语言
3. 执行
4. 写入内存
但我对编译器和解释器中发生的事情感到困惑。编译器不是翻译成二进制语言吗?如果是,为什么需要解码阶段来转换为二进制代码?我想我搞错了。请帮助我更好地理解这些概念。
答案1
是的,编译器做“翻译成二进制”……长话短说,每个(相当简单的)操作都有一个数字。这就是二进制操作码(由特定 CPU 类型的编译器生成)。它还具有汇编语言表示- 它更像是一种中间的人类可读的符号表示法,根本不用于执行。
在执行阶段,需要执行一系列处理器内部步骤才能执行每个命令。最明显的部分是启用/禁用每个步骤的某些“数据路径” - 例如将某些寄存器内容“连接”到算术逻辑单元(又称 ALU,它通过使用大型组合逻辑网络进行“加法”等计算)的输入端口,或将 ALU 输出端口连接到寄存器输入。这甚至可能是其中一个操作数来自的同一寄存器。
您会看到,对于每个二进制/汇编语言命令,通常都有多个内部“微代码”步骤要执行。这就是“解码/执行”所做的:它们获取二进制指令字,查找一系列适当的内部步骤(这些步骤会相应地打开/关闭门,就像钟表一样),然后执行它们。
答案2
汇编语言是机器代码的一种人类可读形式。编译器将汇编语言转换为真正的机器代码,以便在处理器上执行。
传递给 CPU 的不是汇编代码而是编译后的机器代码。
你可能会误以为额外的转换步骤与 CPU 架构(x86 或 x86-64)的概念以及实际的 CPU 核心有关微架构。微架构是原始核心硬件可执行的真实代码或指令,x86 架构环绕该核心并转换为核心可以理解的指令。
现代 CPU 的核心和指令集与创建它们的处理器有很大不同,并且在很多情况下,旧指令很慢或者可以以某种方式进行改进。
将核心微架构封装在平台架构中,可让您实现核心改进,而无需向平台公开更改。它为我们提供了一个通用且相对不变的平台,而实际执行步骤可能大不相同。
您看到的步骤是
- 编译器:将人类可读的指令(汇编语言、C 语言等)转换为机器代码
- CPU 获取机器码并执行
- CPU 调度程序将架构指令重写为微架构指令
- 执行指令
在使用相同核心和平台架构设计的旧 CPU 上,将跳过步骤 3。