GAS_標準ライブラリ関数
GAS(GNU アセンブラ)で標準ライブラリ関数を利用する。
GASはGCCの一部であるため、C言語と同じ標準ライブラリ関数を使うことができます。
GASはアセンブル時に、リンカによってC言語の標準ライブラリ(libc.so)をリンクしています。
GASアセンブリにおける標準ライブラリ関数の呼び出しルールは以下の通りです。
- 引数は逆順にpushする。
- 戻り値がある場合はeaxに返却される。
- 関数から返ってきたときにeax、ecx、edxの値は保証されない。
GASの標準ライブラリ関数を利用するサンプル1
以下は標準ライブラリ関数printfを用いたhello worldプログラムです。
「call printf」を実行する直前に文字列をスタックに格納します。
.data
MSG: .string "hello world\n"
.text
.global main
main:
push %ebp
movl %esp, %ebp
pushl $MSG
call printf
leave
ret
GASの標準ライブラリ関数を利用するサンプル2
2つの文字列を連結して、標準出力に表示します。
strcat関数の結果がeaxに格納されていることが確認できます。
.data
MSG1: .string "gnu "
MSG2: .string "assembler"
MSG3: .string "gas = %s\n"
.bss
.text
.global main
main:
push %ebp
movl %esp, %ebp
/* 文字列を連結する */
pushl $MSG2
pushl $MSG1
call strcat
/* 文字列を出力する */
pushl %eax
pushl $MSG3
call printf
leave
ret
関連ページ
- GAS_基本文法
- GAS_基本書式
- GAS_演算子
- GAS_制御構造
- GAS_関数
- GAS_システムコール
- GAS_標準ライブラリ関数
- GAS_Intel記法の利用
- GAS_インラインアセンブラ
- アセンブリ言語