まずは「ORG 0x7c00」でプログラムが読み込まれる位置を指定しています。
独習アセンブラでは「ORG 0x100」とやることが多かったですが、それとの違いはまだ分かりません。
※違いが判明:0x7c00はブートセクタが読み込まれるアドレスだそうです。詳細はhttp://community.osdev.info/index.php?(AT)memorymapを参照。
また、それに伴って、"$"の意味も「ファイルの何バイト目」ではなくて「読み込まれる予定のメモリの番地」になるそうです。
レジスタの話も登場です。独習でも読んでいるのですが、またちょっと違った角度からの話もでていました。
各種の演算にはAXレジスタを使うとプログラムが簡潔になるらしいです。
- ADD CX, 0x1234 ⇒ 81 C1 34 12 機械語では4バイトの命令
- ADD AX, 0x1234 ⇒ 05 34 12 こっちは3バイトの命令
著者を疑うわけではないですが、本当にそうなるのか確認してみましょう。
ADD命令のみを書いたアセンブラのソースコードをnasmでコンパイルしてみました。
> nasm add_cx.asm
> nasm add_ax.asm
でコンパイルしたファイルをBzで開いてみると、、、
おお、確かに機械語のバイト数が違いますね。