とりあえず、二日目のところまでは通してみました。
と言っても、本当になぞって通しただけの様な感じなので、
身につけるためにも書かれていた内容を簡単にまとめてみます。
一日目、二日目では大体下記の様な内容が書かれていた様に思えます。
- アセンブラについて
- FDによるブートについて
- インテル系のアセンブリ言語について
- BIOSのファンクションについて
- AT互換機のメモリマップについて
- makeについて
どれも今必要になる分だけ、触りを簡単に触れられている程度なのですが、
全く知識のない人間にとっては調べるトリガになってありがたいです。
また、実際に動かしてから説明に入っているので取っつき易い面もあります。
さて、まずはブートです。いまのところAT互換機(Windowsパソコン)では、
電源投入後、まずBIOSが起動してBIOSがディスクの読み出しを行って、
特定の領域をRAMに書き込んで実行していく様です。
本に書いてあったのはFD(FAT12フォーマット)からのブートですが、
書いてあったことを図示すると下記の様な感じでしょうか。
メモリに読み込まれた内容はその先頭から実行される様です。
が、頭から3バイト目以降数10バイト分はなんかヘッダの様な感じです。
実行の際にはその辺りをすっ飛ばして、実行部分までジャンプしていますね。
この辺りはまだ謎のままです。
また、ブートセクタの末尾2バイトはブートの可否のフラグとして用いられているとのことです。
実際に自分のOSをメディアに移す際、MacではFDへの書き込みはできないので、
CD-ROMやDVD-ROMからのブートの仕組みを調査する必要があります。
また、Intel Mac の様にBIOSがないものとかUSBブートとか言う物もある様ですし、
この辺りは最終的に何をターゲットにするかでまた調査し直す必要がありそうです。
二日目のところでレジスタについてさらっと説明してくれています。
読んでも覚えられそうにないので、とりあえず簡単な表にまとめとくことにします。
| アキュムレータ | EAX |
| | AX |
| AH | AL |
|
各種計算に使用。
|
| カウンタ | ECX |
| | CX |
| CH | CL |
|
数のカウントに使用。
|
| データ | EDX |
| | DX |
| DH | DL |
| ベース | EBX |
| | BX |
| BH | BL |
|
番地計算の基点、番地の指定に使用。
|
| スタックポインタ | ESP |
| | SP |
| ベースポインタ | EBP |
| | BP |
|
番地の指定に使用。
|
| ソースインデックス | ESI |
| | SI |
|
番地の指定に使用。
|
| デスティネーションインデックス | EDI |
| | DI |
|
番地の指定に使用。
|
| エクストラセグメント | | ES |
| コードセグメント | | CS |
| スタックセグメント | | SS |
| データセグメント | | DS |
| − | | FS |
| − | | GS |
本書のソースをほとんど修正せずに打ち込むことができていますが、
所々、警告とかエラーがでます。
著者の方がまとめてくれているページ
とNASMのマニュアルページを
参考にして直していっています。
また、著者の方が、BIOSのファンクションと
メモリマップについても
まとめてくれています。こういうのは非常に重宝しますね。
(2006/05/05)