「A general NASM guide for TASM coders and other ASM people」での LEA に
ついての説明が、良かったのでここに記します。
MASM/TASM では、レジスターに単純なオフセットをロードするときに下記のいずれか
の方法で行います。
mov esi, offset MyVar
lea esi, MyVar
複雑なアドレスは、LEA でロードします。
lea edi,[esi*4+ebx]
Yasm/NASM では、レジスターに単純なオフセットをロードするときに LEA ではなく
MOV を使います。
mov esi, MyVar
LEA を使うのは、複雑なアドレスをロードする場合だけです。
lea edi,[esi*4+ebx]
Yasm/NASM と JWasm のバイナリー出力の機能を使って直接 ELF の実行ファイル
を出力するマクロです。マクロのデータが ELF のヘッダーに変換されます。
FreeBSD と Linux で動作を確認しています。
尚、JWasm は、バージョン 1.95 以降が対象となります。
ELF32 の実行フォーマットなんですが、FreeBSD と Linux で微妙に違っています。
8バイトめのデータが、FreeBSD では 9 に Linux では 3 になっています。
FreeBSD のフォーマット
0000-0000 7f 45 4c 46 01 01 01 09 00 00 00 00 00 00 00 00
Linux のフォーマット
0000-0000 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00
下記のサイトを参考にさせて頂きました。