1

好的。我想学习如何在我的 Mac 上组装程序(2009 年初 MBP,Intel Core 2 Duo)。到目前为止,我只了解汇编语言是由 CPU 指令的直接一对一助记符组成的。经过一番谷歌搜索,我看到了很多术语,主要是“x86”和“x86_64”。我还看到了 MASM、NASM 和 GAS 等。

如我错了请纠正我:

  1. x86 和 x86_64 是指令集。如果我使用这些指令集(作为原始机器代码)编写一些东西,只要我的程序停留在它设计的处理器上,我就可以了。
  2. NASM、MASM 和 GAS 都是不同的汇编程序。
  3. 有不同的汇编语言。例如,有 AT&T 语法和 Intel 语法。对这些语法的支持因汇编程序而异。

现在,问题:

  1. 作为 Mac 用户,我应该关注哪些指令集?
  2. Xcode 使用 GCC。这是否意味着它也使用 GAS?
  3. 如果它确实使用 GAS,那么我应该学习 AT&T 语法吗?
  4. 有没有一本书我可以得到这个。不是教程,也不是网络上的参考手册。这些事情对我来说很重要。例如,据我所知,寄存器只是 CPU 上的一点点内存。这就是我真正知道的很少。

谢谢你的帮助。

4

3 回答 3

2

“只要我的程序停留在它设计的处理器上,我就很好。” 并不真地。在许多情况下,汇编程序也会对它们运行的​​操作系统做出假设(例如,当它们调用库函数或进行系统调用时)。否则,您的假设是正确的。

关于问题:

  1. 当前的 Mac 支持 x86 和 x86-64(又名 AMD64 又名 EM64T 又名 Intel64)。32 位和 64 位二进制文​​件都可以在最近的系统上运行;Apple 本身以“胖”(又名“通用”)模式发布其库,即用于多种架构的机器代码。
  2. 使用“as -v”来找出你有什么精确的汇编器;我的报告为“Apple Inc 版本 cctools-698.1~1,GNU 汇编器版本 1.38”。所以是的,它是气体。
  3. 是的。
  4. https://stackoverflow.com/questions/4845/good-x86-assembly-book
于 2009-08-11T14:32:13.277 回答
2

如果你想学习汇编语言,从 x86 指令集开始。这就是基本套路。

关于这个主题的一本好书是 Randall Hyde 的《汇编语言的艺术》,也可以在他的网站上找到。他使用高级汇编程序使事情变得容易掌握和开始,但在深处它使用 GAS。

我不相信 XCode 带有任何汇编程序,但是您可以例如在 MacPort 的 binutils 包中找到 GAS。

如果你只想在你的 Mac 上编写程序并且你对 CPU 中所有位的生命不感兴趣,你最好使用更高级的语言,比如 Python 或 Ruby。

于 2009-08-11T12:41:16.387 回答
0

我将回答第一个问题:Mac 现在使用 Intel 芯片,而现代处理器是 64 位的。

于 2009-08-11T11:30:57.380 回答