2

次のCコードがある場合

int main()
{
    return 77;
}

clang で -S オプションを使用して asm コードを生成すると、次のようになります (Intel 構文)。

$clang -O0 -mllvm --x86-asm-syntax=intel main.c -S 

そのときのコードは

    .section    __TEXT,__text,regular,pure_instructions
    .globl  _main
    .align  4, 0x90
_main:                                  ## @main
    .cfi_startproc
## BB#0:
    push    RBP
Ltmp2:
    .cfi_def_cfa_offset 16
Ltmp3:
    .cfi_offset rbp, -16
    mov RBP, RSP
Ltmp4:
    .cfi_def_cfa_register rbp
    mov EAX, 77
    mov DWORD PTR [RBP - 4], 0
    pop RBP
    ret
    .cfi_endproc


.subsections_via_symbols

ただし、gas も nasm も ld とリンクするオブジェクト ファイルを生成しません。clang や gcc は実際に適切な「すぐに使える」asm を生成しますか? gcc のデフォルトのアセンブラは Gas です (これは mac os x にもインストールされていません...? clang と同じではないでしょうか)。

では、asm コードを手動でアセンブルしてからリンクするにはどうすればよいでしょうか。

4

3 に答える 3

3

clang を使用しているので、gcc の代わりに clang でコンパイルしてみませんか?

clang main.s -mllvm --x86-asm-syntax=intel -o main
于 2013-09-02T17:58:59.853 に答える