在Mac上进行汇编语言编程

7
我使用的是Snow Leopard (10.6.3)系统的Mac电脑。我听说我所使用的汇编语言必须与芯片组兼容。我对此完全不了解,我的编程背景基础是C和Objective-C,PHP方面也有一定经验。我一直想了解汇编语言的相关知识。
我将要学习的教程是由VTC提供的[链接]。我想知道的是:我即将学习的教程是否与我所拥有的Mac上的汇编版本兼容?
尽管我曾在很久以前学习过一些汇编语言,但我对这门语言完全陌生。我现在拥有Xcode,我想知道的是,在Xcode中应该打开哪种文档来使用汇编语言,并且Mac是否内置十六进制编辑器(当需要时)?
5个回答

5
你所使用的汇编语言不取决于你的操作系统,而是取决于你的CPU指令集。根据你的Mac版本,我猜测你使用的是Intel处理器 - 因此你需要学习x86或amd64汇编语言。

1
就我个人而言,我认为x86更容易入门。此外,目前关于x86的信息比amd64更丰富。 - Earlz
5
这段话有点误导人——编程语言是由CPU决定的,但不同平台的系统调用是不同的,因此Linux上的教程不能用于Mac,而且Mac的系统调用文档不太完善。 - shosti
没错 - 但是请考虑一下:Mac OSX 是基于Unix的。 - Nathan Osman
1
是的,它是基于Unix的,但与Linux非常不同(它可能类似于BSD,但我不确定)。尝试在Mac上遵循各种Linux教程可能会非常令人沮丧,因为即使是最基本的调用也不相同。此外,苹果公司倾向于强烈反对直接使用系统调用,因此没有真正的文档可供参考。通过安装Linux虚拟机并通过它学习x86汇编语言可能更容易些。 - shosti
1
同意。当然,Mac不是学习汇编的最佳平台。 - Nathan Osman

1

学习汇编语言的好方法是拿一个嵌入式设备玩一下。

TI有一些不错、价格便宜的开发套件可以试玩。我曾经使用过 Chronos 套件($50),其中有一个带可编程 MSP430 微控制器和与计算机无线连接的数字手表。非常不错。

更新: 我忘了提到 Arduino。它是一个相当棒的开放平台,有许多有趣的外设和在线项目。


0
汇编语言是指令架构特定的。芯片是指令架构的实例。
在我看来,最好使用TextWrangler并直接使用gcc进行编译。
您要查找的文件扩展名是.s

1
“.s”通常用于不太常用的AT&T(GNU as)语法汇编,而“.asm”通常用于Intel(nasm / yasm / tasm / masm)语法汇编。 - Earlz
GCC使用AT&T语法:在Mac上编译时,大多数情况下都在幕后使用gcc。 - Paul Nathan
2
@Paul,“不常用”是指“很少手写”。GNU as语法是经过优化并设计为由编译器生成的。这也是为什么GNU as具有臭名昭著的错误处理和检测。它用于完善GCC代码。这就是我不建议初学者使用它的原因之一。 - Earlz
我不喜欢AT&T语法 - 我不建议使用它,但我不记得Intel语法是否受支持。我只是指向OP在现代Mac上随时可以使用的工具。 - Paul Nathan
@Paul 如果他正在运行x86,则可以下载yasm作为汇编器,或使用GNU as的鲜为人知的.intel_syntax指令(其中有很多错误和陷阱)。是的,许多人确实更喜欢AT&T,但我个人支持Intel。 - Earlz
@Earlz: 你提到的“很多人”一定是疯了。 - slacker

0

汇编语言对于任何处理器来说,在概念上都是大同小异的。然而,复杂性在不同的处理器之间有所不同。从您网站上所看到的,您将使用x86汇编语言(x86是所有消费级Intel处理器使用的指令集,最近的Mac和所有PC都使用),这可能会变得相当复杂,但如果您逐步学习,就不会感到压倒性。

XCode使用纯文本文件,我相信。Hex Fiend 可以满足您的十六进制编辑需求,如果您遇到了这些需求。

请记住,汇编语言是极其低级的。没有if、while或实际上除了“执行操作并GOTO,如果结果为(不)零/相等”之外的任何控制循环(除非您的汇编器提供它们作为语法糖,但在我看来,这有点违背了初衷)。PHP知识最多只能起到辅助作用。您的C知识应该能够帮助您。


你可以使用宏来获取 ifswhiles - Nathan Osman
1
确实。"[...] 作为语法糖,我认为有点失去了目的。" - Mauricio

0

这些链接的教程看起来使用了NASM,它已经包含在Mac中。然而,在不同平台上系统调用通常是不同的(在Mac和Linux之间非常不同),而且没有看到教程,很难知道它们是否会针对不同的平台(尽管我猜测不会)。更好的选择可能是安装SPIM并学习MIPS汇编语言,这比x86更直观。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接