アセンブラでのフロッピーディスク読み込み処理について
アセンブラでのフロッピーディスク読み込み処理について
IPLに興味を持ちCygwinのgas(ver2.19.51)とQEMUで開発を行っています。
フロッピーディスク読み込み処理で、以下の現象がおきて困っています。
esレジスタには0x0100を設定済み、bxレジスタに0x0e00を設定した状態で
フロッピーディスクの1セクタ(0x200バイト)を呼び出すと、処理が終わった後のレジスタの
中身がおかしくなり、以降の処理ができなくなってしまいます。
本来ならbxレジスタは0x1000になるのが正しいと思うのですが、
添付図のようになってしまいます。(esレジスタ、csレジスタなども値がおかしい)
桁上がりがうまくいってないのかなと思うのですが、その原因が全くわかりません
どなたかお分かりになる方よろしくお願いします。
ちなみに、
bxレジスタに0x0c00を設定 ⇒ 処理後0x0e00 となり問題なし
bxレジスタに0x1e00を設定 ⇒ 処理後0x2000 となり問題なし(ちゃんと桁上りしている)
処理は問題ありませんでした。(ワケがわかりません)
---------------------------------------------------
read_fd :
#処理内容 読み出し
movb $0x02, %ah
#開始セクタ番号
movb $3, %cl
#連続して処理するセクタ数
movb $1, %al
#シリンダ番号(トラック番号)
movb $0, %ch
#ヘッド番号
movb $0, %dh
#ドライブ番号
movb $0, %dl
#フロッピーディスクから読み出したセクタの
#メモリ書き込みアドレス[es:bx] esには0x0100設定済み
movw $0xXXX, %bx ←ここのアドレス設定が問題!
int $0x13
ret
お礼
どうもありがとうございました。