yaotti's diary

Software is Eating the World

Macでnasm(アセンブラ)を使う

MacでCファイルとアセンブリをリンクして,実行する方法.

用意するもの

foo.asm
アセンブリを書いたファイル
GLOBAL _foo
_foo:   push    ebp
        mov     ebp, esp
        sub     esp, 4
        mov     eax, [ebp+8]
        imul    eax, [ebp+8]
        mov     [ebp-4], eax
        mov     eax, [ebp-4]
        add     eax, 2
        mov     esp, ebp
        pop     ebp
        ret

*1


これはCで書くと以下と同じ.

int foo(int x)
{
    int y = x * x;
    return y + 2;
}
main.c
Cのソースコード
#include <stdio.h>

main()
{

    printf("%d\n", foo(3));
}

以上.nasmは元々入っているはず.

実行手順

$ nasm -f macho foo.nasm # これでfoo.oというファイルが作られる
$ gcc -o main main.c foo.o # コンパイル
$ ./main # 実行.上記のファイルなら11が出力されるはず

nasmのfオプションの値はlinuxならelf,windowns(cygwin)ならwin32にすれば,後は同じ.nasm -hfとすれば色々出てきます.

*1:シンタックス・ハイライトがnasmに対応してる.はてなすごい…