2

int 0x13 への新しいアプローチを試みています (システムの仕組みについて詳しく知るためだけに): スタックを使用して DAP を作成する..

DL にディスク番号が含まれ、AX に PT の起動可能なエントリのアドレスが含まれ、DS が正しいセグメントに更新され、スタックが正しく設定されていると仮定すると、次のコードになります。

DWORD 0x00000000 をプッシュ
斧を追加、0x0008
ムーブシ、アックス
プッシュ DWORD [ds:(si)]
DWORD 0x00007c00 をプッシュ
WORD 0x0001 をプッシュ
WORD 0x0010 をプッシュ
SSを押す
ポップDS
mov si, sp
mov sp, bp
ムーブああ、0x42
整数 0x13

ご覧のとおり、dap 構造をスタックにプッシュし、それを指すように DS:SI を更新します。DL は既に設定されており、次に AX を 0x42 に設定し、int 0x13 を呼び出します。

その結果、AH でエラー 0x01 が発生し、明らかに CF が設定されます。セクターは転送されません。スタックトレースを際限なくチェックしましたが、問題ありません。パーティションテーブルも問題ありません..何が欠けているのかわかりません...

これは、ディスク アドレス パケットのスタック トレース部分です。

   0x000079ea: 10 00 adc %al,(%bx,%si)
   0x000079ec: 01 00 add %ax,(%bx,%si)
   0x000079ee: 00 7c 00 追加 %bh,0x0(%si)
   0x000079f1: 00 00 add %al,(%bx,%si)
   0x000079f3: 08 00 または %al,(%bx,%si)
   0x000079f5: 00 00 add %al,(%bx,%si)
   0x000079f7: 00 00 add %al,(%bx,%si)
   0x000079f9: 00 a0 07 を追加 %ah,-0x41f9(%bx,%si)

私はqemuの最新バージョンを使用しており、ハードドライブ(0x80)から読み取ろうとしていますが、同じ結果(CF 1 AH 0x01)で構造体の4バイトアライメントも試しました。拡張機能が存在します。

4

2 に答える 2

2

何をしているのmov sp, bpか-BPはどこを指しているのか?上記のコードフラグメントの前のSPにありますか(またはそれに近いですか)?

私の推測では、INT 13呼び出しのスタック使用によって、DAPが破損するような方法で、スタックポインターをリセットしていると思います。例えば:

1) Initial state:           2) After pushing DAP:

|  (stuff)  |               |  (stuff)  |
+-----------+ <-SP          +-----------+ <-BP?
             (== BP?)       |           |
                            |    DAP    |
                            |           |
                            +-----------+ <-SP


3) After mov sp, bp         4) INT 13 stack usage corrupts DAP:

|  (stuff)  |               |  (stuff)  |
+-----------+ <-SP?         +-----------+ SP
|           |               |XXXXXXXXXXX| | INT 13 uses stack 
|    DAP    |               |XXXXXXXXXXX| v
|           |               |corrupt DAP|
+-----------+ <-DS:SI       +-----------+
于 2010-06-19T16:55:58.817 に答える
0

INT 13 拡張機能がサポートされていることを確認しましたか?

MOV AH, 41H
MOV BX, 55AAH          
MOV DL, 80H                ; drive number
INT 13H
JC Unsupported
于 2010-06-19T16:43:27.247 に答える