Posts Tagged ‘asm’
-
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!