为什么 MASM 不能在 Mac OS X 上工作?

Why doesn't MASM work on Mac OS X?

我目前正在学习 class 汇编语言和计算机体系结构。我们在 MASM 中为 x86 处理器编程。我有一本 MacA​​ir 书,所以我当然必须在虚拟机上运行 Windows 才能在 MASM 中为我们的作业编程。

我感到困惑的是:我们正在学习 x86 架构并为其编程。当我查看 Macbook Air 的处理器时,它似乎属于 x86 系列。考虑到这一点,为什么 MASM 不能与 Mac OS X 一起工作?

此外,如果汇编语言直接与硬件通信,为什么仅在 Apple 硬件上安装 Windows OS(或通过 VM 运行它)突然允许我在 MASM 中编程?

谢谢, 伊恩

[编辑澄清:我的理解——如果我错了请告诉我——汇编语言是 "low as you can go." 即它是预操作系统,直接向硬件本身提供指令。因此,我不明白为什么 x86 体系结构的汇编语言不能在所有 x86 机器上运行,无论 OS]

程序不仅仅由 mac 原始代码组成。可执行文件需要具有 OS 可以理解的特殊格式,以便它可以加载和 运行 代码。此外,代码需要特定的环境,例如库和系统调用(以及适当的调用约定)。

要编译和 运行 您的汇编程序,您需要先 assemble 它,在本例中是通过 MASM 运行 它。然而,MASM 本身是一个 windows 可执行文件。它是 windows 的可执行格式,并相应地使用库和操作系统函数。因此,您不能 运行 直接在 mac os 上。之后,您通常还需要 link 您的代码,它有同样的问题。下一个问题是程序本身。 MASM(以及工具链的其余部分)默认情况下也以 windows(或 dos)为目标,因此创建的程序具有适当的格式。

理论上您可以使用 windows 和 masm 在 mac os 上创建一个旨在 运行 的程序。这个统称为cross-compiling。如果您的工具链不支持所需的 mac 格式,您将需要手动创建所有内容。您显然还需要编写您的程序,使其期望 mac 环境。例如,您不能使用 dos 中断或 windows 库。

由于体系结构相同,因此无需虚拟化cpu。您可以只模拟环境。例如 windows 模拟器、winecygwin 在 windows 上模拟 unix。

一个非常粗略的类比:有使用相同字母表的人类语言,但您仍然需要翻译。还有一些语言甚至不使用相同的字母表,或者甚至没有字母。在这些情况下,您将需要做更多的工作。