FASM ( flat assembler ) は、x86プロセッサ用のアセンブラです。IA -32およびx86-64コンピュータ アーキテクチャでIntel スタイルのアセンブリ言語をサポートしています。高速性、サイズ最適化、オペレーティングシステム(OS) の移植性、マクロ機能などを謳っています。[ 2 ] [ 3 ]低レベルのアセンブラであり[ 3 ] 、意図的にコマンドラインオプションをほとんど使用しません。フリーでオープンソースのソフトウェアです。
FASM のすべてのバージョンは、以下のいずれかを直接出力できます。フラットな「生」バイナリ(MS-DOS COM 実行可能ファイルまたは SYS ドライバとしても使用可能)、オブジェクト:実行可能ファイルおよびリンク可能フォーマット(ELF) または共通オブジェクトファイルフォーマット(COFF) (従来型または MS 固有)、またはMZ、ELF、またはポータブル実行可能ファイル (PE) フォーマットの実行可能ファイル (WDM ドライバを含む、カスタム MZ DOS スタブも使用可能)。ARMアーキテクチャを対象とした非公式の移植版も存在します。[ 4 ]
このプロジェクトは、当時ポーランドの数学の学部生だった Tomasz Grysztar (別名Privalov)によって 1999 年に開始されました。2000 年 3 月に一般公開されました。[ 5 ] [ 6 ] FASM は完全にアセンブリ言語で書かれており、ソースコードもすべて付属しています。自己ホスティングが可能で、バージョン 0.90 (1999 年 5 月 4 日) 以降は自己アセンブルが可能になっています。
FASMは当初、16ビットのフラットリアルモードで動作していました。その後、32ビットのサポートが追加され、オプションでDPMIサポートも追加されました。フラット32ビットアドレッシングを備えたあらゆるオペレーティングシステムに容易に移植できるように設計されており、Windows、そしてLinuxに移植されました。
FASM はMASMやTASMほど多くの高レベルステートメントをサポートしていません。[ 3 ]構文機能とマクロが提供されており、不足しているステートメントをカスタマイズしたり作成したりすることができます。[ 5 ]メモリ アドレス指定構文は TASM の理想モードとNASMに似ています。両方のアセンブラと同様に、角括弧を使用してメモリ オペランドを示しますが、NASM と同様に、サイズは角括弧の外に配置されます。[ 7 ]
FASM はマルチパスアセンブラです。広範なコードサイズ最適化を行い、制約のない前方参照を可能にします。[ 3 ] [ 7 ] FASM の珍しい構造は、コード内のどこかで使用されている場合にのみプロシージャを定義することです。これは、ほとんどの言語ではリンカ によってオブジェクトごとに行われます。
FASM は「同じソース、同じ出力」の原則に基づいています。つまり、結果のファイルの内容はコマンドラインの影響を受けません。[ 7 ]このようなアプローチにより、FASM ソースは多くのアセンブリ プロジェクトでよく発生するコンパイルの問題から解放されます。一方で、個別にコンパイルされた複数のソース ファイルや混合言語プロジェクトで構成されるプロジェクトの保守が難しくなります。しかし、この問題を軽減する FA と呼ばれる Win32ラッパーが存在します。[ 8 ] FASM プロジェクトは、リンク段階を経ずに 1 つのソース ファイルから直接実行可能ファイルにビルドできます。[ 3 ]
Fresh はJohn Found が始めたプロジェクトで、Windows と Linux 上で FASM 用の統合開発環境です。 [ 9 ]
FASMで記述されたオペレーティングシステム:
FASMをバックエンドとして使用するコンパイラ:
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)