|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
|||||||||||
NASM Как прочитать диск с помощью int 13h22.10.2025, 22:35. Показов 2278. Ответов 31
Метки нет (Все метки)
Пишу свою ОС, просто как тестовый проект ради изучения языка. Начал с написания PBR. Пытаюсь прочитать 1 сектор диска. Там находится вторая часть PBR после байтов 0x55AA. Почитав интернет, рабочий метод чтения диска я не нашел. Каждый код, который я использую, записывает неверные данные в мой адрес. Предварительно перед чтением диска я конечно же проверяю этот адрес и он всегда пустой.
Кликните здесь для просмотра всего текста
1
|
|||||||||||
| 22.10.2025, 22:35 | |
|
Ответы с готовыми решениями:
31
Int 13h. Не могу прочитать с винта за раз блок более 64кб Как записать данные в загрузочный сектор без использования int 13h
|
|
780 / 412 / 75
Регистрация: 29.03.2013
Сообщений: 854
|
||
| 25.10.2025, 22:05 | ||
|
Добавлено через 54 минуты ARRAYBOW, дисковые функции (INT 0x13) не в курсе логической конструкции вашего раздела. Они оперируют только LBA номерами секторов. Их ещё называют физическими секторами, для отличия от логических секторов раздела. Судя по скрину VBR, логическому сектору 0 вашего раздела соответствует LBA сектор с номером 0x800, следовательно логический сектор 1 от вашего раздела соответствует LBA сектору с номером 0x801. Его и надо скармливать функции чтения, а не 1.
1
|
||
|
Эксперт Hardware
|
||||||
| 26.10.2025, 07:10 | ||||||
Сообщение было отмечено Mikl___ как решение
Решение
ARRAYBOW, вирт.диски имеют другую лог.структуру, нежели физ.харды. Например на вашем скрине видно, что в дампе нет таблицы разделов по смещению
01BEh. Если вы хотите приблизить обстановку к реальной, то используйте в качестве бут-девайсов или флоп, или флэшку. Это просто реализовать, зато при тестах на реальном железе получить профит.1. Чтобы сделать образ реального флопика, достаточно в редакторе HxD создать новый файл размером строго 1.474.560 байт, и сохранить его с расширением *.img. Теперь можете вставить в его сектор(0) бинарник своего загрузчика, обязательно комбинацией Ctrl+B (вставка с заменой). Если вставить по Ctrl+C, размер образа флопа увеличится, и QEMU не примет его на свой борт. Для прыжков по адресам, в HxD предусмотрена комбинация Ctrl+G. Батник для запуска будет такой (в строке -drive измените путь до образа *.img на свой):
2. Чтобы сделать образ Boot-флешки, нужно отформатировать её на хосте, и записать в первый байт таблицы разделов по смещению 0x01BE, флаг загрузочного тома 80h. Здесь аналогично бросаете загрузчик в сектор(0) MBR, а вот начало лог.раздела носителя будет лежать уже по смещению 01С6h - это и будет указателем на VBR/PBR. На хардах лог.раздел начинается обычно с сектора(63) =3Fh, а на флешках с сектора(1024) =400h.Вот образ ОС на флопике, которую я писал недавно для экспериментов, но так и не закончил (остался переход в РМ и LongMode). Можете протестировать батником выше. Там есть и чтение секторов AH=42h, и многое другое.
1
|
||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||
| 26.10.2025, 11:13 | |||
|
Вы прислали скрин, но там непонятно: сектора 0 и 1 — это сектора физического диска или логического? P.S. Вы cld добавили в код? Это критически важно. А отладку через Bochs сделали (кстати, чтобы получить GUI-отладчик, добавьте в разделе "Display & Interface" в строке "Display Library options" опцию gui_debug)? Что видите?Вообще, у вас много лишнего кода. Даже вместо repe cmpsb можно сделать проверку просто через cmp dword [адрес],4байта + cmp word [адрес+4],2байта.
1
|
|||
|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
||
| 26.10.2025, 12:18 [ТС] | ||
|
0
|
||
|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
||
| 26.10.2025, 12:31 [ТС] | ||
|
0
|
||
|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
||
| 26.10.2025, 12:54 [ТС] | ||
|
0
|
||
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||
| 26.10.2025, 13:11 | |||
|
4 блока по 16 байт. В каждом есть признак активности раздела (byte, смещение 0) и начало раздела (dword, смещение 8). Проверяете каждый, смотрите, какой из них активный, берёте номер сектора начала раздела и оттуда читаете. Почитайте заодно алгоритм "Выбор загрузочного раздела и проверка целостности MBR". Добавлено через 4 минуты Если диск размечен как GPT, то MBR тоже содержит Partition Table, и первый диск указан, начиная с сектора LBA 1 и имеет тип (байт по смещению 4) = 0xEE (или 0xED). Добавлено через 4 минуты Теоретически первый логический раздел может начинаться с сектора LBA 1, но как правило, оставшиеся 62 сектора на 0-й дорожке (0-й головки) не трогают. Часто даже делают выравнивание до 1 МБ (т.е. первые 2048 секторов не трогают).
1
|
|||
|
Эксперт Hardware
|
||||||
| 26.10.2025, 19:54 | ||||||
|
ARRAYBOW, покажите дамп сектора(0) вашего только-что созданного вирт.диска *.vhd, без скопированного поверх загрузчика MBR и прочего - только девственный диск. У меня например он выглядит так:
1
|
||||||
|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
|||||||
| 27.10.2025, 11:58 [ТС] | |||||||
0
|
|||||||
|
Эксперт Hardware
|
||
| 27.10.2025, 13:17 | ||
|
Это не то.. Вы-же пишите, что грузитесь в qemu с вирт.диска VHD, пропуская первые 5Ah байт от начала:
qemu-image create -f .. вроде не поддерживает-же создание дисков VHD, а только RAW и QCOW2. Тогда где вы создаёте вирт *.vhd? Мне просто нужно сравнить формат с моим *.vhd, который я создал в VirtualBox / VirtualPC. Это открытая спека (см.скрепку) где указано, что сектор(0) является служебным.
1
|
||
|
Чугунные скороходы
17 / 16 / 3
Регистрация: 25.12.2022
Сообщений: 367
|
||||||||
| 27.10.2025, 14:03 [ТС] | ||||||||
1
|
||||||||
|
Эксперт Hardware
|
|
| 27.10.2025, 14:26 | |
|
во, спасибо, то-что надо.
1
|
|
| 27.10.2025, 14:26 | |
|
Чтение диска (int 13h ah=02h) - как определить входные параметры? Функция 48h int 13h DOS виснет на int 13h при чтении MBR жесткого диска Будут ли работать функции прерывания int 13h с виртуальным флоппи диском Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|