【问题标题】:How to fix 'LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)'?如何修复“不允许使用 LOCK 前缀(op1=0x53,attr=0x0,mod=0x0,nnn=0)”?
【发布时间】:2012-01-01 07:01:39
【问题描述】:

我的简单代码:

  [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 的错误状态,而不是被该错误消息停止。

发生了什么事?如何解决?

谢谢~

【问题讨论】:

  • 非英文字母只是编码 cmets 吗?
  • 我认为您应该将您的(中文?)cmets 翻译成英文,因为这是一个讲英语的论坛,而 cmets 有助于理解代码。
  • 即使它们只是 cmets,我认为留下 cmets 是有原因的,也许是为了帮助读者理解代码的目的。因此,在发布到英语问答网站时翻译它们是有意义的。由于“过于本地化”而投票结束。

标签: assembly nasm floppy


【解决方案1】:

您的问题可能是由于您的代码崩溃和/或执行“未知”代码(例如,恰好看起来像无效指令的数据)引起的。

要解决问题,您需要修复代码中的错误。最可能的错误是没有告诉 BIOS 在哪里加载扇区(ES:BX 应该包含您希望 BIOS 加载扇区的地址),并且因为您在使用“加载扇区/s”之前没有设置 ES:BX " BIOS 功能您可能会丢弃一些重要的东西(例如您自己的代码或堆栈,或者可能是 IVT)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2016-12-31
    • 2019-10-07
    相关资源
    最近更新 更多