Optimization 为什么不';编译器生成微指令而不是汇编代码?

Optimization 为什么不';编译器生成微指令而不是汇编代码?,optimization,architecture,compiler-construction,assembly,low-level,Optimization,Architecture,Compiler Construction,Assembly,Low Level,我想知道为什么在现实世界中,编译器生成的是汇编代码,而不是微指令 如果您已经绑定到一个架构,为什么不更进一步,让处理器不必在运行时将汇编代码转换为微指令 我想可能在某个地方有一个实现瓶颈,但我在谷歌上没有找到任何东西 编辑微指令我的意思是:如果汇编指令是ADD(R1,R2),那么微指令将是。将R1加载到ALU,将R2加载到ALU,执行操作,将结果加载回R1。另一种方法是将一条微指令等同于一个时钟周期 我的印象是,微指令是“官方”名称。显然,这里的里程有些变化 FA编译器不生成微指令,因为处理器不

我想知道为什么在现实世界中,编译器生成的是汇编代码,而不是微指令

如果您已经绑定到一个架构,为什么不更进一步,让处理器不必在运行时将汇编代码转换为微指令

我想可能在某个地方有一个实现瓶颈,但我在谷歌上没有找到任何东西

编辑微指令我的意思是:如果汇编指令是ADD(R1,R2),那么微指令将是。将R1加载到ALU,将R2加载到ALU,执行操作,将结果加载回R1。另一种方法是将一条微指令等同于一个时钟周期

我的印象是,微指令是“官方”名称。显然,这里的里程有些变化


FA

编译器不生成微指令,因为处理器不执行微指令。它们是芯片的实现细节,而不是暴露在芯片外面的东西。无法向芯片提供微指令。

因为x86 CPU不执行微操作,而是执行操作码。您无法创建包含微操作的二进制图像,因为无法以CPU理解的方式对其进行编码


您所建议的基本上是针对x86 CPU的新RISC风格指令集。这种情况之所以没有发生,是因为它会破坏与为x86指令集编写的大量应用程序和操作系统的兼容性。

答案很简单

(有些)编译器确实会生成代码序列,比如load r1、load r2、将r2添加到r1。但这正是机器代码指令(你称之为微码)。这些指令是外部世界和处理器内部之间唯一的接口


(其他编译器只生成C,并让像gcc这样的C后端关注脏的细节。)

定义微指令的含义。二进制文件?或者处理器内解码的微操作?微操作。。我称之为微指令。否决票和接近票是什么意思?这是一个完全合理的问题。你是说处理器中解码的微操作?(只是重复检查。)如果是这样,答案是不可能的,因为解码的微操作即使在同一ISA和处理器行中也会发生变化。编译器生成处理器能够执行的机器代码。如果有一个处理器可以直接执行微码,并且用户可以访问它,那么您可能会看到类似的情况。并非所有处理器都是微代码,因此您已经在生成和执行最低级别的机器代码。除了transmeta实验之外,底层代码可能不是您所期望的,也不是可以编写应用程序的东西。