Как исправить «префикс LOCK не разрешенным (op1 = 0x53, attr = 0x0, mod = 0x0, nnn = 0)»? - PullRequest
2 голосов
/ 01 января 2012

Мой простой код:

  [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, но не останавливаться этим сообщением об ошибке.

Что случилось? Как это исправить?

Спасибо ~

1 Ответ

1 голос
/ 01 января 2012

Возможно, ваша проблема вызвана сбоем кода и / или выполнением "неизвестного" кода (например, данных, которые выглядят как недопустимая инструкция).

Чтобы исправить проблему, вам нужно исправить ошибки в вашем коде. Наиболее вероятная ошибка - это не указание BIOS, куда загружать сектор (ES: BX должен содержать адрес, по которому BIOS должен загружать сектор), а также потому, что вы не устанавливаете ES: BX перед использованием «load sector / s». «Функция BIOS - это, вероятно, что-то важное (например, ваш собственный код или стек, или, может быть, IVT).

Другие ошибки включают в себя не настройку допустимого стека и не проверку на ошибки (и не повторение попыток); но эти ошибки гораздо реже могут вызвать вашу текущую проблему.

...