为什么MASM不能在Mac OS X上运行?

时间:2015-01-09 01:39:17

标签: assembly x86 operating-system hardware computer-architecture

我目前正在参加汇编语言和计算机体系结构课程。我们正在MASM中为x86处理器编程。我有一台Macbook Air,所以当然我必须在虚拟机上运行Windows才能在MASM中为我们的作业编程。

我很困惑:我们正在学习x86架构并为其编程。当我抬起Macbook Air的处理器时,它似乎出现在x86系列中。考虑到这一点,为什么MASM不能与Mac OS X一起使用?

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

谢谢, 伊恩

[编辑澄清:我的理解 - 请告诉我,如果我错了 - 汇编语言是否“尽可能低”。即它是预操作系统,直接向硬件本身提供指令。因此,我不明白为什么x86架构的汇编语言不适用于所有x86机器,无论操作系统如何]

1 个答案:

答案 0 :(得分:5)

程序不仅仅是原始机器代码。可执行文件需要具有操作系统可以理解的特殊格式,因此它可以加载和运行代码。此外,代码需要某个特定的环境,例如库和系统调用(以及相应的调用约定)。

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

理论上你可以使用windows和masm创建一个在mac os上运行的程序。这通常称为交叉编译。如果您的工具链不支持所需的mac格式,则需要手动创建所有内容。你显然还需要编写你的程序,以便它需要mac环境。例如,您不能使用dos中断或Windows库。

由于架构相同,因此您不需要虚拟化CPU。你可以逃避模仿环境。一个示例是Windows模拟器,winecygwin在Windows上模拟unix。

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