作者:youxiang574传奇_257 | 来源:互联网 | 2023-05-27 17:20
我目前正在参加汇编语言和计算机体系结构课程.我们正在MASM中为x86处理器编程.我有一台Macbook Air,所以当然我必须在虚拟机上运行Windows才能在MASM中为我们的作业编程.
我感到困惑的是:我们正在学习和编写x86架构.当我抬起Macbook Air的处理器时,它似乎出现在x86系列中.考虑到这一点,为什么MASM不能与Mac OS X一起使用?
此外,如果汇编语言直接与硬件通信,为什么仅在Apple硬件上安装Windows操作系统(或通过VM运行它)突然允许我在MASM中编程?
谢谢,伊恩
[编辑澄清:我的理解 - 请告诉我,如果我错了 - 汇编语言是否"尽可能低".即它是预操作系统,并直接向硬件本身提供指令.因此,我不明白为什么x86架构的汇编语言不适用于所有x86机器,无论操作系统如何]
1> Jester..:
程序不仅仅是原始机器代码.可执行文件需要具有操作系统可以理解的特殊格式,因此它可以加载和运行代码.此外,代码需要某个特定的环境,例如库和系统调用(以及相应的调用约定).
要编译和运行汇编程序,首先需要先组装它,在这种情况下通过MASM运行它.但是,MASM本身是一个Windows可执行文件.它是Windows的可执行格式,它相应地使用库和操作系统功能.因此,您无法直接在mac os上运行它.之后,您通常还需要链接具有相同问题的代码.下一个问题是程序本身.MASM(以及工具链的其余部分)默认情况下也是以windows(或dos)为目标,因此创建的程序具有适当的格式.
理论上你可以使用windows和masm创建一个在mac os上运行的程序.这通常称为交叉编译.如果您的工具链不支持所需的mac格式,则需要手动创建所有内容.你显然还需要编写你的程序,以便它需要mac环境.例如,您不能使用dos中断或Windows库.
由于体系结构相同,因此您无需虚拟化CPU.你可以逃避模仿环境.一个例子是Windows模拟器wine
,或cygwin
在Windows上模拟unix.
一个非常粗略的比喻:人类语言使用相同的字母表,但您仍需要翻译.还有一些语言甚至不使用相同的字母,甚至没有字母.在这些情况下,您需要做更多的工作.