【问题标题】:Why doesn't MASM work on Mac OS X?为什么 MASM 不能在 Mac OS X 上运行?
【发布时间】:2015-03-07 07:16:06
【问题描述】:

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

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

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

谢谢, 伊恩

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

【问题讨论】:

  • MASM 是微软。 Mac OS X 是苹果。微软和苹果互不喜欢。
  • 为什么要这样? Xcode 有自己的汇编器。
  • @Mysticial 他们是秘密恋人。
  • 也许,就像 R&J 一样,他们最终都会死。
  • @Seva:Xcode 使用 GNU 汇编器,它使用不同的(而且,IMO,非常丑陋和难以辨认)语法,AT&T 风格。但是 Jester 的回答解释了为什么 MASM 不起作用。无论如何,也许在 Mac 上,可以使用 NASM 或 FASM。它们更类似于 MASM 而不是 GASM。

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


【解决方案1】:

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

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

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

由于架构相同,不需要虚拟化cpu。您可以只模拟环境而侥幸逃脱。一个例子是 windows 模拟器,winecygwin 在 windows 上模拟 unix。

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

【讨论】:

  • 很好的解释,或多或少是我会写的。 +1
  • cygwin 是模仿,不是模仿
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多