X86アセンブラ/x86アセンブラ
多くのアセンブラがx86アーキテクチャで利用可能である。ここでは、それらのアセンブラのいくつかを挙げ、どこで入手できるか、どのような良い点があり、どのような分野で最も使われてるかを説明する。
目次 |
GNUアセンブラ(GAS)[編集]
GNUアセンブラは最も一般的で、GNUコンパイラコレクションのバックエンドとして働いている。GAS(しばしばGASと略される)でのプログラムを学ぶ最も説得力のある理由は、GNU CコンパイラのインラインアセンブリはGASの文法によらなくてはならないということであろう。GASはアセンブリ言語で書くのにAT&T記法を使っており、人によってはより複雑になっていると不平を言い、人によってはより情報が含まれていると言うものである。
Microsoft Macro Assembler (MASM)[編集]
マイクロソフトマクロアセンブラ (MASM) は、本当に長い年月、一貫して使われてきた。多くの人々は、MASMはサポートされていないし、今以上改善されることもないと文句を言っているが、マイクロソフトはこれを否定している。MASMはメンテナンスされているし、現在もバグの修正が行なわれていると主張している。現在、新しい機能は追加されていない。しかし、マイクロソフトは新しい64ビットコンパイラスイートと一緒に64ビット版のMASMを出荷している。MASMはまだマイクロソフトから入手することができる。1つの方法は、MSDNからダウンロードすることであり、もう1つの方法は、Microsoft DDKの一部として入手することである。現在入手可能なMASMのバージョンは8.xである。
MASMは、AT&T記法を採用しているGASとは違い、Intel記法を採用している。最も違うのは、MASMの命令はGASの場合とオペランドの順が逆であるということである。この事実は、おそらく人々がGASとMASMの間を行き来するのを妨げている最大の理由であろう。
MASMは非常に協力なマクロエンジンを持っており、多くのプログラマはMASMでプログラムを書く際に高水準言語風に書くのに使っている。
外部リンク[編集]
JWASM[編集]
JWASMは16、32、64ビットに対応したx86プラットフォーム用のアセンブラであり、Open WatcomのWASMをベースとして、Japheth氏によって作られた。MASMと文法に互換性があり高速で、ソースコードはSybase Open Watcom Public Licenseの下でフリーで入手できる。つまり、商用非商用を問わずに自由に使うことができる。これらに加え、ELF形式をサポートしており、これにより広く使われているMASMの文法をサポートした唯一のクロスプラットフォームのアセンブラとなっている。JWASMは活発に開発されており、一般的には非公式なMASMの後継とみなされている。
外部リンク[編集]
Netwide Assembler (NASM)[編集]
NASM (Netwide Assembler) は、フリーな、x86プラットフォーム用コードを生成するx86以外のプラットフォームでも動作するアセンブラを作ることを目的に作り始められた。NASMプロジェクトが始められた時、MASMはまだマイクロソフトによって販売されており(MASMは現在は無料である)、GASはエラーチェック能力が非常に不足していた。というのは、GASはGCCのバックエンドであり、GCCは常にGAS文法に適合したコードを生成するからである。このため、GASはユーザの求めるインターフェースを持つ必要がなく、GAS用のコードを書くのは非常に大変であった。NASMの文法は、インテル記法に近いが複雑さのより少ないものである。
NASMのユーザマニュアルは http://www.nasm.us/doc/ で読むことができる。
特徴:
- クロスプラットフォーム: GASと同様にNASMはほとんど全てのプラットフォームで動き、PowerPCを搭載したMacでさえ動く(しかし、生成されたコードはx86プラットフォームでしか動かない)。
- オープンソースである。
- マクロ言語(コードを書くコード)を持つ
Flat Assembler (FASM)[編集]
アセンブリで書かれているが、MS-DOSやDexOS、Linux、Windows、BSDといったいくつかのオペレーティングシステムで動く。FASMの文法はTASMの「idealモード」やNASMと似ているが、FASMのマクロは異なる。
特徴:
- FASM自身で書かれており、ソースコードはFASMでどのように書くかの例となる
- クリーンでNASMに似ている文法
- 非常に非常に高速である
- マクロ言語(コードを書くコード)を持つ
- MS-DOSとWindows用には、内蔵のIDEを持つ
- リンカなしでMZ、PE、ELF、COFFのバイナリを作ることができる
外部リンク[編集]
Yasmアセンブラ[編集]
Yasmは、修正BSDライセンスでNASMを一から書き直したものである。Yasmは複数の文法をネイティブに解釈するように設計されている(現在はNASMとGASの文法をサポートしている)。Yasmの第一の目的は、低水準のコードとはたらく再利用可能で、他のソフトウェアプロジェクトに簡単に統合できるようなライブラリlibyasmを作ることである。
外部リンク[編集]
HLA[編集]
HLAはRandall Hydeによって作られたアセンブラフロントエンドであり、最初に彼の著書である「The Art of Assembly」で広まった。
HLAでは高水準のフォーマットを使ってアセンブリ言語を書き、コードを他のフォーマット(通常はMASMかGAS)に変換する。他のアセンブラ(MASMかGAS)で命令を機械語にアセンブルする。