Xcode 6です。
ファイル作成
新規プロジェクト作成でCommand Line Toolを選びます。
言語はCを選ぶ。
main.cは消しちゃいます。
新規ファイル作成から、
Assembly Fileを選びます。
こういうコードを書きます。
.global _main
.text
_main:
movl $1, %eax
subl $12, %esp
int $0x80
たぶんgasのAT&Tシンタックスというやつだと思います。(自信ない)
Intelシンタックス
Intelシンタックスを使うには .intel_syntax noprefix
をつけます。
.intel_syntax noprefix
.global _main
.text
_main:
mov eax, 1
sub esp, 12
int 0x80
ビルド
このままだと64bitでコンパイルされると思うので、32bitでコンパイルされるようにします。
ビルドしてできるファイルを file
コマンドで見てみると、x86_64からi386に変わっているのがわかります。
% file ams-test: Mach-O 64-bit executable x86_64
% file ams-test: Mach-O executable i386
デバッグ
ブレークポイントも置けます。
デバッガーのパネルではAll Variables, Registers, Globals and Statisticsを選択しておくとレジスタの値が見られます。
それから、Debug→Debug Workflow→Always Show Disassemblyにチェックを入れておくと、
ブレークポイントで止まるときにこういうのが出てきます。
ここはソースコードをintelシンタックスで書いたとしてもAT&Tシンタックスで表示されます。
また、そのすぐ下のView Memoryを選ぶとこういう画面が出てきます。
Addressというところに例えばespレジスタ周辺の値を入れると、スタックのメモリレイアウトが見られます。