GNUアセンブラ
GNUアセンブラ(グヌーアセンブラ、英: GNU assembler; GAS) はGNUプロジェクトによって開発されているアセンブラである。GNUコンパイラコレクションのデフォルトのバックエンドとして使用されており、GNUオペレーティングシステムやLinuxカーネルのコンパイルにも使われる。Ver.2.5以降はGNU Binutilsパッケージの一部分である[2]。
![]() | |
開発元 | GNUプロジェクト |
---|---|
最新版 | |
プログラミング 言語 | C言語 |
プラットフォーム | クロスプラットフォーム |
種別 | アセンブラ |
ライセンス | GNU General Public License v3 |
公式サイト |
www |
Gasの実行ファイル名は as であり、Unix系システムでの標準的なアセンブラの実行ファイル名である。GASはクロスプラットフォームであり、様々なコンピュータ・アーキテクチャ上で動き、またそれらを対象にアセンブルすることができる。GNU General Public Licenseでライセンスされた自由ソフトウェアである。
歴史
編集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 /* ここはコメント 改行の入った 説明文 */
単一行
単一行コメントには、アセンブル対象のアーキテクチャに応じていくつかの異なる形式がある。
記法
編集批判の一つに、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"に代入
出典
編集- ^ "GNU Binutils 2.44 Released"; 閲覧日: 2025年2月2日; 出版日: 2025年2月2日.
- ^ "The GNU Binutils are a collection of binary tools. The main ones are: ... as - the GNU assembler." GNU Binutils. gnu.org. 2022-03-11閲覧.
- ^ a b "The GNU Assembler". CiteSeerX 10.1.1.32.4503。
- ^ “The GNU Assembler - Assembler Directives”. 2008年5月16日閲覧。
- ^ “GNU Assembler News”. 2025年2月19日閲覧。 “A new pseudo-op .intel_syntax has been implemented to allow gas to parse i386 assembly programs with intel syntax.”
- ^ “AT&T Syntax versus Intel Syntax”. 20 June 2011時点のオリジナルよりアーカイブ。28 July 2014閲覧。
- ^ Ram Narayan (2007年10月17日). “Linux assemblers: A comparison of GAS and NASM”. IBM DeveloperWorks. 3 March 2009時点のオリジナルよりアーカイブ。28 July 2014閲覧。
- ^ “The GNU Assembler - Comments”. 2008年5月16日閲覧。
- ^ “GNU Assembler News”. 2008年5月16日閲覧。
- ^ “AT&T Syntax versus Intel Syntax”. Using as, the GNU Assembler. 2008年5月16日閲覧。
- ^ Ram Narayan (2007年10月17日). “Linux assemblers: A comparison of GAS and NASM”. IBM DeveloperWorks. 2007年10月17日閲覧。