プログラミング 低レイア

BIOSファンクション (AT互換機)を用いたディスクの読み込みについて

メモ

自分なりの言葉で補足する。

ディスクからの読み込み
AH = 0x02; (読み込み時)
AL = 処理するセクタ数; (連続したセクタを処理できる)
CH = シリンダ番号 & 0xff;
CL = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2;
DH = ヘッド番号;
DL = ドライブ番号;
ES:BX = バッファアドレス;
戻り値:
FLAGS.CF == 0 : エラーなし、AH == 0
FLAGS.CF == 1 : エラーあり、AHにエラーコード(リセットファンクションと同じ)

バッファアドレスの指定だが、何故こんなまわりくどい指定をするのか
現在のCPUは、EBXという32bitレジスタがあるから一発で指定が可能。
だが当初のBIOSには 16bit(0~65535)までしかメモリ番地を指定できない。
補助的に、セグメントレジスタ ES を使うようになった。
MOV AL [ES:BX] と書くと
EX * 16 +BX で計算する仕組みとなる。
*16なので、16進数表現なら1桁左にずらすのと同等となる
例:ES=0x0820 , BX=0 なら、指定するメモリ番地は 0x8200番地となる。

-プログラミング, 低レイア
-