※ ChatGPTを利用し、要約された質問です(原文:アセンブラでのフロッピーディスク読み込み処理について)
アセンブラでのフロッピーディスク読み込み処理の問題と解決方法
このQ&Aのポイント
アセンブラでのフロッピーディスク読み込み処理で発生した問題の原因と解決方法について解説します。
フロッピーディスクの1セクタを読み込む際に、レジスタの値が正しく更新されず、処理ができなくなる問題が発生しました。
原因としては、フロッピーディスク読み込み処理の中でアドレスの設定が誤っていることが考えられます。bxレジスタのアドレス設定を修正することで問題が解決します。
アセンブラでのフロッピーディスク読み込み処理について
アセンブラでのフロッピーディスク読み込み処理について
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
お礼
ご推察の通りでした。スタックを壊しているのが原因でした。 お答えくださってありがとうございました。