繁体   English   中英

在Mac上组装

[英]Assembly on the Mac

我正在尝试将汇编语言作为一种“丰富”练习来学习。 我有一台Mac,似乎最好的学习资源是Linux。 我唯一的Linux运行于Parallels Desktop for OSX。 由于汇编是基于OS和芯片组的,因此尝试通过虚拟机汇编Linux汇编语言是否会有很多其他问题? 我了解OSX Assembly不是最好的学习方法。

谢谢!!

-J.P

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

也许您想先尝试内联汇编。 我对教程的推荐不够。 Clang接受GCC的内联汇编语法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM