Posts Tagged ‘asm’

  1. Hello, GAS World!

    Posted on 1月 2nd, 2012 by cx20

    GAS

    GAS は GNU プロジェクトで使用されるアセンブリ言語である。Linux カーネルの開発にも用いられている。
    構文の特徴としては Intel 記法ではなく、AT&T 記法が使われているという特徴がある。

    ソースコード(32bit版)

            .text
            .globl  _main
    _main:
            pushl   %ebp
            movl    %esp, %ebp
            andl    $-16, %esp
            subl    $16, %esp
            call    ___main
            movl    $_msg, (%esp)
            call    _puts
            movl    $0, %eax
            leave
            ret
     
            .data
    _msg:
            .asciz  "Hello, GAS World!"

    ソースコード(64bit版)

            .text
            .globl  _main
    _main:
            pushq   %rbp
            movq    %rsp, %rbp
            leaq    _msg(%rip), %rdi
            callq   _puts
            xorl    %eax, %eax
            popq    %rbp
            ret
     
            .data
    _msg:
            .asciz  "Hello, GAS World!"

    上記コードは以下のC言語のソースを GCC でアセンブリコード出力(gcc -S hello.c)したものに相当する。

    #include <stdio.h>
     
    int main( int argc, char* argv[] )
    {
        printf( "Hello, GAS World!n" );
        return 0;
    }

    コンパイル&リンク方法(32bit版)

    $ gcc -c hello.s -m32
    $ gcc -o hello hello.o

    コンパイル&リンク方法(64bit版)

    $ gcc -c hello.s -m64
    $ gcc -o hello hello.o

    実行結果

    Hello, GAS World!