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!

Tags: ,

Categories: assembler, GAS

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing