NASM и INT13h - что я делаю не так? - PullRequest
2 голосов
/ 15 июля 2010

Эй, я довольно заинтересован в написании ОС, я был в течение долгого времени, но все еще просто не мог проглотить это (я в основном говорю: «Чего вы не можете понять при первом чтении, вы не должны делать вообще»- и это применимо ко всему, что я делаю, например, к PHP, HTML, AS3.0, C ++ ... и многому другому), только сейчас я ВИДЕЛА это.Проблема в том, что ASM до сих пор не был настолько интересным, что мне нужен конкретный загрузчик (я ЗНАЮ, что есть другие, такие как GRUB или что-то подобное, но это просто длинная история).часть заключается в том, чтобы фактически прочитать что-то с диска в сектор изображения и перейти туда.Однако INT 0x13 с AH 0x02, т.е.чтение сектора (-ов) с диска не работает (или я просто не получаю его).

Итак, я нашел эту информацию: Нажмите

И послеПосле небольшого исследования в Бохсе я выяснил количество секторов, цилиндров, головок и всего на диске.

Теперь, чтобы проверить его, я хотел прочитать первый сектор и распечатать несколько символов из него.- потому что я знаю, что в начале есть этот самый загрузчик, и я видел бы часть используемых сообщений.

Но, это просто ... не работает.Я пытаюсь поместить буфер в другое место, сообщение, другой сектор ... Кто-нибудь может показать мне пример такого чтения определенной точки?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 июля 2010

Наконец-то понял!

Кажется, номер диска (DL) был неправильным ... Поскольку я переключился на жесткий диск (вместо дискеты), я забыл изменить его на 0x80.Кроме того, номер сектора находится в битах 2-7 в канале, а не в 0-5.

: D В любом случае, спасибо.

0 голосов
/ 15 июля 2010

Вы могли бы взглянуть на исходный код одного из известных вам загрузчиков, например, grub ...

Или даже проще: сохранить MBR или загрузочный сектор рабочей установки в файле иразбери это.Это здорово, потому что он даст вам код загрузчика, который делает только минимум из-за нехватки места (максимум 512 байт)

...