2

私の簡単なコード:

  [ORG 0x7C00]
  MOV       AH,0x02     ;Using the function of reading floppy
  MOV       AL,0x01     ;The number of sectors to be read is 1.
  MOV       CH,0x00     ;Only read 0 track
  MOV       CL,0x03     ;Only read the third sector
  MOV       DH,0x00     ;Only read the 0 head
  MOV       DL,0x00     ;Using driver 0
  INT       13H

  JMP $ ;Just for loop forever


  TIMES 510 - ($ - $$) db 0 ;This is for 1 sector(512 bytes)
  DW 0xAA55 ;This is for the end of boot sector

bochsdbgで実行した後。

それが示している:

  (0) Breakpoint 1, 0x00007c00 in ?? ()
  Next at t=12943079
  (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ah, 0x02              ; b402
  <bochs:3> c
  00012943849i[FDD  ] read() on floppy image returns 0
  00012989063i[CPU0 ] LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)

INT 13は、そのエラーメッセージで停止するのではなく、CF=1でエラーステータスを返す必要があると思います。

何が起こったか?それを修正する方法は?

ありがとう〜

4

1 に答える 1

2

問題はおそらく、コードのクラッシュや「不明な」コードの実行 (無効な命令のように見えるデータなど) が原因である可能性があります。

この問題を解決するには、コードのバグを修正する必要があります。最も可能性の高いバグは、セクターをロードする場所を BIOS に指示していないことです (ES:BX には、BIOS にセクターをロードさせたいアドレスが含まれている必要があります)。 " BIOS 機能は、おそらく重要なもの (自分のコードやスタック、あるいは IVT など) を破棄します。

その他のバグには、有効なスタックを設定しない、エラーをチェックしない (および再試行しない) などがあります。しかし、これらのバグが現在の問題を引き起こす可能性ははるかに低くなります。

于 2012-01-01T08:13:05.087 に答える