有关Assembly和Mac的基本问题

时间:2009-08-11 11:08:57

标签: macos assembly x86 x86-64

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

如果我错了,请纠正我:

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

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

3 个答案:

答案 0 :(得分:2)

如果要学习汇编语言,请从x86指令集开始。那是基本的设定。

关于这个主题的好书是兰德尔海德的汇编语言艺术,也可以在他的网站上找到。他使用高级汇编程序来使事情易于掌握和开始,但在内心深处它使用GAS。

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

如果你只是想在你的Mac上制作程序而你对CPU中所有位的生命并不感兴趣,那么使用更高级的语言(如Python或Ruby)会更好。< / p>

答案 1 :(得分:2)

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

问题:

  1. 目前的Mac支持x86和x86-64(又名AMD64又名EM64T又称Intel64)。 32位和64位二进制文​​件都可以在最近的系统上运行; Apple本身以“胖”(又称“通用”)模式发布其库,即多种体系结构的机器代码。
  2. 使用“as -v”查找您拥有的精确汇编程序;我的报告为“Apple Inc版本cctools-698.1~1,GNU汇编版本1.38”。是的,这是GAS。
  3. https://stackoverflow.com/questions/4845/good-x86-assembly-book

答案 2 :(得分:0)

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