【发布时间】:2021-01-19 14:06:54
【问题描述】:
我有一个 C++ 程序,我想编译成汇编,然后汇编器将它编译成机器码。
现在,据我所知,为了将汇编代码转换为机器代码,汇编器需要某种表格来将汇编指令映射到实际的机器指令。
汇编器将使用哪个表?我的 C++ 程序是否有可能无法在所有 CPU 上运行,因为 CPU 使用不同的表,这意味着相同的机器代码将在不同的 CPU 上执行不同的操作?
【问题讨论】:
-
即使是汇编代码也因架构而异。您是否有理由不能为每个目标架构编译相同的源代码?
-
现在还有编译器可以创建程序集吗?我以为这通常是通过反汇编生成的代码来模拟的。
-
您在描述LLVM。使用它。
-
要了解为什么您所要求的内容本质上是矛盾的,请查看一些简单的 ISA 示例,例如 6502、68000 和 8088,以了解它们的不同之处。编译器必须知道要定位哪个架构,否则它只会发出垃圾。一个简单的查找表并不能解决问题,这些芯片的工作方式在许多情况下根本不同。
-
您是否混淆了“中间代码”(C++ 编译器第一阶段的输出)与第二阶段的输出(基于目标处理器/架构的可重定位目标文件)?第一阶段的输出(“中间代码”)可以针对不同的处理器/架构“重新定位”。
标签: c++ assembly cpu-architecture processor