| 開発者 | GNU プロジェクト |
|---|---|
| 安定版リリース | GNU Binutils 2.43.1 [1]
/ 2024年8月17日 |
| 書かれた | C |
| プラットフォーム | クロスプラットフォーム |
| タイプ | アセンブラ |
| ライセンス | GNU 一般公衆利用許諾書v3 |
| Webサイト | www.gnu.org/software/binutils/ |
GNUアセンブラは、一般にgasまたはasと呼ばれ、GNU プロジェクトによって開発されたアセンブラです。これは、 GCCのデフォルトのバックエンドです。GNUオペレーティング システム、Linux カーネル、およびその他のさまざまなソフトウェアをアセンブルするために使用されます。これは、 GNU Binutilsパッケージの一部です。
GAS実行可能ファイルは、 Unixアセンブラの標準名である と名付けられています。GAS はクロスプラットフォームであり、さまざまなコンピュータ アーキテクチャ上で実行され、アセンブルされます。GAS は、GNU General Public License v3に基づいてリリースされたフリー ソフトウェアです。
歴史
GASの最初のバージョンは1986年から1987年にリリースされました。[2]これはDean Elsnerによって書かれ、VAXアーキテクチャをサポートしていました。[2]
一般的な構文
GAS は、サポートされているすべてのアーキテクチャで機能する一般的な構文をサポートしています。一般的な構文には、アセンブラ ディレクティブとコメント メソッドが含まれます。デフォルトの構文はAT&T 構文です。
指令
GASはアセンブラディレクティブ(疑似命令とも呼ばれる)を使用する。これはピリオドで始まるキーワードで、 Cプログラミング言語のプリプロセッサディレクティブと同様に動作する。利用可能なアセンブラディレクティブのほとんどはターゲットアーキテクチャに関係なく有効だが、一部のディレクティブはマシンに依存する。[3]
バージョン2.10以降では、ディレクティブを使用することでIntel構文を使用できます.intel_syntax。[4] [5] [6]
コメント
GASは2つのコメントスタイルをサポートしています。[7]
複数行
C と同様に、複数行のコメントは、対称的なスラッシュとアスタリスクのペアで始まり、終わります。
/*
コメント
*/
単線
単一行コメントには、アセンブル対象のアーキテクチャに応じていくつかの異なる形式があります。
- ハッシュ記号( #) — i386、x86-64、i960、68HC11、68HC12、VAX、V850、M32R、PowerPC、MIPS、M680x0、RISC-V
- セミコロン(;) — AMD 29kファミリ、ARC、H8/300ファミリ、HPPA、PDP-11、picoJava、Motorola、およびM32C
- アットマーク(@) — 32 ビットARM
- 二重スラッシュ(//) — AArch64
- 縦棒(|) — M680x0
- 感嘆符(!) —ルネサス SH
使用法
GNU アセンブラは、人気のコンパイラ スイートである GCC のバックエンドとして、最新のフリーおよびオープン ソース ソフトウェアのコンパイルに広く使用されています。GAS は、他の GNU ソフトウェアと組み合わせて Linux オペレーティング システム上のアセンブラとしてよく使用されます。GAS の修正バージョンは、 macOS開発ツール パッケージにも含まれています。
サンプルプログラム
IA-32上のLinux用の標準的な「Hello, world!」プログラム:
.グローバル_開始
.text
_start:
movl $4 、%eax # 4 (「書き込み」システムコールのコード) -> EAX レジスタmovl $1 、%ebx # 1 (stdout のファイル記述子) -> EBX (システムコールへの 1 番目の引数) movl $msg 、%ecx # メッセージ文字列の 32 ビット アドレス -> ECX (2 番目の引数) movl $len 、%edx # メッセージ文字列の長さ -> EDX (3 番目の引数) int $0x80 # カーネルのシステム コール プロシージャを呼び出す、位置 0x80 (128) の割り込み
movl $1 、%eax # 1 ("終了") -> EAX movl $0 、%ebx # 0 (成功) -> EBX int $0x80 # 前の.data msg を参照: .ascii "Hello, world!\n" # インライン ascii 文字列len = . - msg # シンボル "len" に (現在のアドレス - メッセージ開始アドレス) を割り当てます
参照
参考文献
- ^ Nick Clifton (2024年8月17日). 「GNU Binutils 2.43.1 リリース」 . 2024年8月18日閲覧。
- ^ ab 「GNU アセンブラ」. CiteSeerX 10.1.1.32.4503。
- ^ 「GNU アセンブラ - アセンブラ ディレクティブ」。2012 年 2 月 22 日時点のオリジナルよりアーカイブ。2008 年 4 月 13 日閲覧。
- ^ 「GNU アセンブラ ニュース」。
新しい疑似オペレーション .intel_syntax が実装され、gas が intel 構文を使用して i386 アセンブリ プログラムを解析できるようになりました。
- ^ 「AT&T 構文と Intel 構文」。2011 年 6 月 20 日時点のオリジナルよりアーカイブ。2014 年7 月 28 日閲覧。
- ^ Ram Narayan (2007-10-17). 「Linux アセンブラー: GAS と NASM の比較」 IBM DeveloperWorks. 2009 年 3 月 3 日時点のオリジナルよりアーカイブ。2014年7 月 28 日閲覧。
- ^ Red Hat Inc. 「Using as」。2011年6月20日時点のオリジナルよりアーカイブ。2013年1月10日閲覧。
