Я пишу загрузчик для BIOS в 16-битном реальном режиме, используя qemu в качестве моего эмулятора.INT 13h, получить статус последнего оп
У меня есть код, который не читается с моего HD. Это нормально, но меня действительно беспокоит, когда я пытаюсь получить код состояния из этой операции, используя «Получить статус последней операции с приводом».
Согласно this wikipedia resource, я могу просто установить AH на 1 и установить DL на мой желаемый диск (который я проверил 0x80). Затем, когда я вызываю int 13h
, AL должен иметь в нем код состояния.
Однако, когда я это делаю, флаг переноса устанавливается, указывая, что моя попытка прочитать сам статус не удалась.
Другое, что указывает неправильный диск, я не вижу, как это может произойти.
Так что мой вопрос: Каковы способы, которыми эта команда (INT 13h, AH 01h) могла бы сбой?
Вот мой код:
get_status:
mov ah, 0x01 ; status fxn
mov dl, 0x80 ; 0x80 is our drive
int 0x13 ; call fxn
jc print_status_failure
jmp $
print_status_failure:
mov ax, FAIL_MSG
call print_string
jmp $
И что вы получаете в 'AL' и' AH'? По-видимому, версии BIOS отличаются тем, где они возвращают информацию. Кроме того, набор 'CF' может относиться к тому факту, что сам статус не в порядке, а не сам запрос. – Jester
В качестве предложения вы можете взглянуть на то, что BIOS вводит в номер накопителя. Я забыл, что он находится в 'DL' или' DH' при загрузке, но иногда это не то, что вы ожидаете. Это может привести к ошибке, которую вы видите, потому что диск фактически не равен 0x80. –
Почему бы просто не проверить AH после возврата Fn 0x02 CF? Вы получите тот же результат –