次のコードでディスクセクターを読み取ろうとしています:
disk_load :
push dx
mov ah , 0x02 ; BIOS read sector function
mov al , dh ; Read DH sectors(dh is initialized before calling the routine)
mov ch , 0x01 ;
mov dh , 0x00 ; Select head 0
mov cl , 0x02 ; Start reading from second sector ( i.e.
; after the boot sector )
mov dl,0x80 (tried with 0x00 as well)
int 0x13 ; BIOS interrupt
pop dx ; Restore DX from the stack
jc cset
cmp dh,al ; if AL ( sectors read ) != DH ( sectors expected )
jne disk_error ;
問題は、エラーを示すたびにキャリーフラグが設定されることです。最初にブートディスク 0x00 を試してみましたが、後で AL レジスタを確認したところ、セクターが読み取られていないことがわかりました。次に、0x80 に変更しました。これで、AL レジスタには要求された正確な数のセクタが含まれますが、キャリー フラグは設定されたままです!
では、ここで何が問題になるのでしょうか? キャリーは必ず int 0x13 の後に設定されているようです! 問題があれば、Virtual Box で iso ファイルを実行しています。