トップQs
タイムライン
チャット
視点
GNUアセンブラ
ウィキペディアから
Remove ads
GNUアセンブラ(グヌーアセンブラ、英: GNU assembler; GAS) はGNUプロジェクトによって開発されているアセンブラである。GNUコンパイラコレクションのデフォルトのバックエンドとして使用されており、GNUオペレーティングシステムやLinuxカーネルのコンパイルにも使われる。Ver.2.5以降はGNU Binutilsパッケージの一部分である[2]。
Gasの実行ファイル名は as であり、Unix系システムでの標準的なアセンブラの実行ファイル名である。GASはクロスプラットフォームであり、様々なコンピュータ・アーキテクチャ上で動き、またそれらを対象にアセンブルすることができる。GNU General Public Licenseでライセンスされた自由ソフトウェアである。
Remove ads
歴史
GASの最初のバージョンは1986年から1987年にリリースされた[3]。これはディーン・エルスナー(Dean Elsner)によって書かれ、VAXアーキテクチャをサポートしていた[3]。
一般的な構文
GASはサポートするアーキテクチャすべてで使用可能な一般構文を持つ。一般構文にはアセンブラ指示文やコメントも含まれる。デフォルトの構文はAT&A記法である。
ディレクティブ
GASはピリオドで始まるキーワードである、C言語のプリプロセッサに似たアセンブラ指示文(疑似命令)を使用する。ほとんどのアセンブラ指示文はすべてのアーキテクチャを対象に使用できるが、一部機種依存のものもある[4]。
バージョン2.10以降では、.intel_syntax
ディレクティブを使用することでIntel記法を使用できる[5][6][7]。
コメント
GASは2つのコメント形式をサポートしている。
複数行
Gasは、C言語と同様の「/*」「*/」で囲まれる複行コメントを実装している[8]。
movl %eax,%edx /* ここはコメント 改行の入った 説明文 */
単一行
単一行コメントには、アセンブル対象のアーキテクチャに応じていくつかの異なる形式がある。
Remove ads
記法
批判の一つに、x86やx86-64といったアーキテクチャ上で一般的なインテル記法ではなく、AT&T記法を使用することが挙げられる。mov などの命令の引数の順番が逆になっている。
しかし、バージョン2.10[9]から追加された.intel_syntax
ディレクティブにより、インテル記法もサポートされた[10][11]。
利用
GNUアセンブラは、人気のコンパイラスイートであるGCCのバックエンドとして、オープンソースソフトウェアや自由ソフトウェアのコンパイルに広く使用されている。GASは、他のGNUソフトウェアと組み合わせてLinuxオペレーティングシステム上のアセンブラとしてよく使用される。GASの修正されたバージョンは、macOS開発ツールパッケージにも含まれている。
プログラム例
IA-32上のLinux用の標準的な「Hello, world!」プログラムは以下のように実装される。
.global _start
.text
_start:
movl $4, %eax # 4("write"システムコールのコード)-> EAXレジスタ
movl $1, %ebx # 1(標準出力のファイルディスクリプタ)-> EBX(システムコールの第1引数)
movl $msg, %ecx # msg文字列の32ビットアドレス -> ECX(第2引数)
movl $len, %edx # msg文字列の長さ -> EDX(第3引数)
int $0x80 # 0x80(128)で割り込みを発生させ、カーネルのシステムコール処理を呼び出す
movl $1, %eax # 1("exit")-> EAX
movl $0, %ebx # 0(成功終了)-> EBX
int $0x80 # 前述の通り
.data
msg:
.ascii "Hello, world!\n" # インラインのASCII文字列
len = . - msg # (現在のアドレス - msgの開始アドレス)をシンボル"len"に代入
Remove ads
出典
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads