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!" |
.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!" |
.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;
} |
#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 |
$ gcc -c hello.s -m32
$ gcc -o hello hello.o
コンパイル&リンク方法(64bit版)
$ gcc -c hello.s -m64
$ gcc -o hello hello.o |
$ gcc -c hello.s -m64
$ gcc -o hello hello.o
実行結果
Tags: asm, GAS
Categories: assembler, GAS