OSDev Wiki
Advertisement

Типичные ошибки.

1) Отсутствует магическая подпись
db 55h, 0AAh
2) Перепутан порядок константы или их место размещение.
2.1) 55h, 0AAh соответственно имеют смещения 510d, 511d (смещение считается от нуля)
Для CD рекомендуется повторить в конце сектора.
2.2) Не стоит портить DiskSignature им тоже пользуются некоторые биусы.
2.3) Все служебные поля важны!
3) Неправильный размер загрузочного сектора.
Правильный для HDD, Floppy 512 Байт.
Для CD зависит от формата, диска, чаще всего .
3.3) Неправильный размер образа диска. Для Floppy 1.44 = 1 474 560 байт
4) Не учли, что код может запускаться с разными значениями CS:IP.
Разные комбинации CS:IP могут указывают на один физический адрес 7C000h
Надо присвоить CS=0 IP=7C000h, выставить org 7C000h
5) Забыли выставить начальное значение регистров. В том числе в регистре флагов направления инкремента. Разрешены прерывания!
6) Не сохранили или случайно испортили номер диска который передал вам биос в регистре DL.
7) Неправильно пользуетесь командой org
org 100h //Указано неправильное смещение.
Или забыли выставить правильное.
Учесть что после копирования кода MBR смещения секции данных будут отличным от org 7C000h
8) Не учли размер диска.
8.4) До ~8ГБ пользуемя старым сервисом Более ~8Гб новым EDD.
8.5)
8.6) Для дисков больше 2 ТБ стоит пользоваться расширенной таблицей разделов GPT
9) При переводе из LBA в CHS не учли переполнение при делении. См. описание команды div. При деление необходимо чтобы результат был меньше половины регистра.
10) Не учли что в некоторых случаях CHS и LBA могут содержать FF FF FF. Такое бывает если диск больше чем то который может описать данная структура. Надо пользоваться CHS->LBA-LBA48
11) При записи перепутали MBR с BR.
11.1) вместо 0 сектора записали код в 1.
11.2) попутали логический диск с физическим.
12) Floppy диск, не учли наличие сбоев при чтении.
Надо пробовать читать несколько раз.
13) Не настроен или неправильно настроен стек. Или неправильный порядок команд.
14) Биос не поддерживает загрузку с USB или есть какие-то подводные камни.
14.1) Надо использовать код диска в DL, а не 80h/81h см. Boot Bios Specification
14.2) Редко, но бывает наоборот. На старых третьих пнях.

Advertisement