アセンブラ

Masm32

ソースから実行ファイルを作成するには

Masm32 の文法に則った foo.asm を作成する
以下のコマンドで foo.asm から foo.obj が生成される

ml /c /coff /Cp foo.asm

以下のコマンドで foo.obj から foo.exe が生成される
32 bit GUI アプリケーションの場合

link /subsystem:windows foo.obj

32 bit CUI(コンソール)アプリケーションの場合

link /subsystem:console foo.obj

NASM

ソースから実行ファイルを作成するには

NASM の文法に則った foo.asm を作成する
以下のコマンドで foo.asm から foo.com が生成される

nasm foo.asm -o foo.com
何もしない 16 bit MS-DOS アプリケーション

NASM 文法に則ったソース

mov ah, 0x4c
mov al, 0x00
int 0x21

レジスタ ah と al にそれぞれ 0x4c と 0x00 を格納し、 int 0x21 して、 MS-DOS にこのアプリケーションが終了したことを通知している
ah に 0x4c が 終了
al の 0x00 は正常に終了したことのしるし
int 0x21 で MS-DOS に通知

このソースから実行ファイルを作成すると、中身は

B4 4C B0 00 CD 21

こうなっている

B4 mov ah,
4C 0x4C
B0 mov al,
00 0x00
CD int
21 0x21

それぞれ 1 対 1 で対応している

アセンブル

NASM に同梱している ndisasm.exe を使う

ndisasm foo.exe > foo.txt

バイナリと命令が 1 対 1 で書かれたテキストファイルが出来上がる
ただし、データセクションも命令として変換されてしまうため、プログラムの流れを忠実に記述しているものではないが、 16 進数のどのデータがどの命令や数値と対応しているのかを知るための辞書(ニーモニック表)代わりとなる

16 bit アプリケーションの実行

Windows XP で 16 bit アプリケーションを実行するには、 cmd.exe 内で一度 command.com を実行する
そうすると、 16 bit モードに切り替わる
すぐに exit する
16 bit モードが継続している
この状態で、 16 bit アプリケーションを実行する