在Mac上组装

时间:2013-06-20 16:33:15

标签: linux macos assembly virtual-machine

我正在尝试将汇编语言作为一种“丰富”练习。我有一台Mac,似乎是学习Linux的最佳资源。我唯一的Linux运行Parallels Desktop for OSX。由于汇编是基于操作系统和芯片组的,我是否会在尝试通过虚拟机组装Linux汇编语言时遇到很多额外的问题?我知道OSX Assembly不是最好的学习方法。

谢谢!

-jP

1 个答案:

答案 0 :(得分:1)

x86-64上的Linux和OS X使用相同的ABI - 至少,调用约定,堆栈设置等。汇编指令略有不同。它们的不同之处在于系统调用,但如果您只是编写函数,特别是简单的叶函数,则无关紧要。无论如何,优化热点是用户区组装的少数几个原因之一。最小的OS X功能可能如下所示:

    .text
    .p2align 4 ## 16-byte aligned start.
    .globl _foo_bar ## leading underscore in name.

_foo_bar:
    ## your code ##
L__some_label_for_jump_destination
    ## more code ##
    ret

组装成Mach-O文件格式。对于Linux(GNU汇编程序):

    .text
    .p2align 4 ## or other.
    .globl foo_bar ## no leading underscore in name.
    .type foo_bar,@function

foo_bar:
    ## your code ##
.L__some_label_for_jump_destination ## dot before label
    ## more code ##
    ret

    .size foo_bar,[.-foo_bar] ## not strictly needed - ELF object info.

.align指令有不同的变体,但我发现.p2align 4涵盖了ELF平台和OS X,所以我不打算在OS X上使用.align 4,0x90。如果有疑问,只需查看一个简单函数的一些C代码程序集输出:clang/gcc -c -S foo.c

也许您想首先尝试内联汇编。我不能推荐this教程。 Clang接受GCC's inline assembly syntax

相关问题