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