0

「強化」の練習としてアセンブリ言語を学ぼうとしています。私は Mac を持っていますが、学ぶのに最適なリソースは Linux 向けのようです。私の唯一の Linux は Parallels Desktop for OSX で動作します。アセンブリは OS およびチップセット ベースであるため、仮想マシンを介して Linux アセンブリ言語をアセンブルしようとすると、さらに多くの問題が発生しますか? OSX Assembly は学習に最適ではないことを理解しています。

ありがとう!!

-JP

4

1 に答える 1

1

Linux とx86-64 上のOS Xは同じABIを使用します。少なくとも、呼び出し規則、スタックのセットアップなどは同じです。アセンブリ ディレクティブにはわずかな違いがあります。それらの違いはシステム コールにありますが、関数、特に単純なリーフ関数を記述するだけであれば、それほど問題にはなりません。とにかく、ホットスポットを最適化することは、ユーザーランドでアセンブリする数少ない理由の 1 つです。最小限の 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.

There are different variations of the .align directive, but I've found .p2align 4 covers both ELF platforms and OS X, so I don't bother with .align 4,0x90 on OS X. If in doubt just look at some C code assembly output of a simple function: clang/gcc -c -S foo.c

Perhaps you would like to try inline assembly first. I can't recommend this tutorial enough. Clang accepts GCC's inline assembly syntax.

于 2013-06-20T17:28:11.260 に答える