【问题标题】:Code Compiler - How to compile the ASM code? [closed]代码编译器 - 如何编译 ASM 代码? [关闭]
【发布时间】:2026-01-27 23:35:01
【问题描述】:

我一直在用 C++ 制作一个编程语言编译器,它将我的代码转换为汇编。但是,我不知道如何将此汇编代码转换为可执行格式(最好是 .exe)。我怎么能做到这一点?

【问题讨论】:

  • 您的目标处理器需要一个汇编器,并且可能还需要一个链接器。 gasld 是 GNU binutils 的一部分,在 GPL 下免费提供,因此您可以从那里开始。
  • 您知道如何从 C++ 编写汇编程序输出,但您不知道如何将其汇编为可执行文件???如果是这样的话,我们怎么知道你的编译器正在生成哪种类型的 asm 风格?
  • 为了获得更好的答案,请以“编译器”的一些输出为例,并准确指定开发主机操作系统和目标架构和/或操作系统是什么。

标签: c++ assembly compiler-construction converter executable


【解决方案1】:

使用Microsoft Macro Assembler 8.0 (MASM) Package (x86)

Microsoft Macro Assembler 8.0 (MASM) 是一个使用 x86 汇编语言程序并生成相应二进制文件的工具。

【讨论】:

  • 这个答案假定输出是 Intel 语法 x86 汇编程序,开发主机是 Windows,目标是 MS-DOS 或 Windows。这是很多假设;尽管考虑到输出“.exe”的请求可能是合理的,但这再次假设 OP 知道他在说什么 - 这绝不是给定的。
【解决方案2】:

汇编汇编代码而不是编译它,汇编器是你需要的工具。

您需要的确切汇编程序将取决于目标指令集 - 汇编语言实际上不是一种语言,它描述了任何一种语言,其中助记符用于表示单个机器代码指令。

即使对于单一架构,汇编语言语法也可能会有所不同——例如在 x86 上至少有两种语法——Intel and AT&T,因此即使对于 x86,您也需要一个能够处理工具输出的任何语法的汇编程序。你的工具当然需要输出汇编器可以使用的东西,这可能意味着生成额外的汇编器和目标特定指令,而不仅仅是原始的汇编器助记符。

对于您的语言编译器来说,输出 C 或 C++ 代码(严格来说是翻译器而不是编译器)可能更简单,这就是早期 C++“编译器”的工作方式(Comeau C++ 仍然如此) ),那么您的语言将至少更容易在不同架构之间移植。对于任何目标,C 编译器几乎和汇编器一样无处不在,但是转换为 C 可以让您为所有目标体系结构提供一个后端。

【讨论】:

    最近更新 更多