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 加载扇区的地址),并且因为您在使用“加载扇区/s”之前没有设置 ES:BX " BIOS 功能您可能会丢弃一些重要的东西(例如您自己的代码或堆栈,或者可能是 IVT)。

其他错误包括未设置有效堆栈和未检查错误(并且未重试);但这些错误不太可能导致您当前的问题。

于 2012-01-01T08:13:05.087 回答