1日目では16進数で入力していましたが、アセンブラのニーモニックでの入力に変わりました。
まずは「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バイトの命令
と機械語に変換されるので、アセンブラのソースコードでは違いはみえませんが、機械語に翻訳された時点で4バイトと3バイトとなるようです。
著者を疑うわけではないですが、本当にそうなるのか確認してみましょう。
ADD命令のみを書いたアセンブラのソースコードをnasmでコンパイルしてみました。
> nasm add_cx.asm
> nasm add_ax.asm
でコンパイルしたファイルをBzで開いてみると、、、


おお、確かに機械語のバイト数が違いますね。