8086アセンブリ言語のアセンブラ
問題
レガシーなブートシーケンスでは8086モードなので、8086アセンブリ言語が使えないと困る。
本来は CPU の仕様書に従うべきと考えれば、Intel 記法一択だが、記述のしやすさ、コンパイラの作りやすさなどから独自記法がいくつも作られてしまっている。
どういう観点からアセンブラを選択したらよいか?
使ってるプラットフォーム上で動作するかどうか?
ライセンス上問題がないかどうか?
注意すべきもの
購入が必要なもの
商用使用不可のもの
その他、利用すると何らかの不利益(何とは言わないが)が発生するもの
少なくとも目的のバイナリが作れるかどうか?
ブートローダーの場合は、生のバイナリデータがそのまま配置されるので、配置アドレスを固定できるか、あるいはリロケータブルな機械語が出力されなければならない。(つまり PE とか ELF とかのローダーやリンカが必要なバイナリはダメ)
x86/x64 アーキテクチャは現在も拡張を続けていて、新しい命令が追加されている。
OS が起動する前までは8086/80286/80386互換で動く必要があるため、そこはあまり関係ないかも。
最終的に自動的にビルドができるかどうか
Docker によるビルドを使うなら Linux で動く必要性がある。
Intel 記法と AT&T 記法の違い
レジスタや即値に %、$ を使うのが AT&T
ソース(送り元)とディスティネーション(送り先)が、逆
Intel は ディスティネーション、ソースの順
AT&T はソース、ディスティネーションの順
MASM
Microsoft Macro Assembler 8.0
Intel 記法
Windows のみ
現在は無償で利用可能
GAS
GNU assembler
AT&T 記法
Intel 記法とソースとディスティネーションが逆。
無償で利用可能
NASM