OSDev

для всех
Текущее время: 10 май 2024, 08:47

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 12:13 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Автор вроде использует 16-разрядную нумерацию секторов (обнуляет старшие 16 бит при делении). Тогда переполнения быть не должно. Может быть только деление на ноль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 13:00 

Зарегистрирован: 24 авг 2013, 22:58
Сообщения: 33
Деление на 0 вроде как нет, т.к значения BPB блока не 0, в коде моем видно. Вообщем, как я понимаю как-то плохо он принимает переменные Track Sector Head, в bochs ошибки теперь такие:
attempt to read/write sector X past last sector 18
X принимает значение от 19 и до ...
Вообщем, я грешу на то что происходит в памяти(Хотя это просто невероятно что должно происходить), либо на формулы(По формулам 33 LBA sector = 15 сектору, как все вылазит за пределы 15 не понимаю, все уже пересчитал на калькуляторе), но как говорил Фантом(А он в этом сильно умен) формулы вроде бы правильные, попробую воспользоваться bochsdbg, может там чего узнаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 13:21 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Лично я для себя выбрал следующую стратегию написания кода.

Вначале делаем схему программы. Описывая её состав. Затем делаем высокоуровниваю реализацию. В конкретном случае это запись формул и функций. Затем статический анализ и создания тестов.
После перевожу на ассемблер делаю это в IDE BP 7.0 так как ошибки править проще и компиляция и запуск в одно нажатие. Отлаживаю.
Затем переношу все функции в Tasm, и проверяю в TD. А после уже переношу в загрузчик и проверяю в BochsDbg.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 13:27 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
novice, по двум последним ссылкам, которые я давал, можно взять два различных рабочих варианта преобразования. Что мешает это сделать? Твой код, даже если он и рабочий, содержит много лишних действий. А если уж проверенный многократно код будет давать ошибки, тогда будем копать дальше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 14:31 

Зарегистрирован: 24 авг 2013, 22:58
Сообщения: 33
А, да да Фантом, я просто отходил =) Сейчас этим займусь


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 14:35 

Зарегистрирован: 24 авг 2013, 22:58
Сообщения: 33
Кстате говоря HeadsPerCylinder является BPB_NumHeads который равен 2-ум?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 14:36 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
novice писал(а):
попробую воспользоваться bochsdbg, может там чего узнаю

Если задаёшь org 0, тогда сегментные регистры загружай рабочим сегментом 7C0h. В твоём коде это будет так
Код:
start:
mov ax, 7C0h
mov ds, ax
mov es, ax
mov ax, 0
mov ss, ax
mov sp, 7C00h


В bochsdbg можно делать так. В файле bochsrc.txt настраиваешь параметр
magic_break: enabled=1
потом в своей программе в контрольной точке ставишь инструкцию "xchg bx,bx", на ней отладчик остановится, это для него "магическая" инструкция. При запуске bochsdbg сначала даётся команда "c" чтобы пошло выполнение, а потом сработает точка останова. Для распечатки регистров команды regs, sreg, creg. Потом для выполнения по одной инструкции команда "s". Чтобы на каждом шаге выводилась таблица регистров, надо один раз запустить команды trace on, trace-reg on, trace-mem on.
Весь журнал сообщений сохранится в файле debugger.out


Последний раз редактировалось Himik 25 авг 2013, 14:56, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 14:45 

Зарегистрирован: 24 авг 2013, 22:58
Сообщения: 33
После перенастройки сегментных регистров как ты указал, программа не идет дальше, то есть не идет ничего после этих строк
Код:
start:
mov ax, 7C0h
mov ds, ax
mov es, ax
mov ax, 0
mov ss, ax
mov sp, 7C00h


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 14:52 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
novice писал(а):
После перенастройки сегментных регистров как ты указал, программа не идет дальше, то есть не идет ничего после этих строк

Я выше дописал, как надо трассировать, смотри. Программа не может не идти дальше, полностью остановить процессор можно только инструкциями cli и hlt, либо вызовом тройного исключения.
Ты я надеюсь понимаешь, почему сегментные регистры настраиваются на 7C0h?
novice писал(а):
Кстате говоря HeadsPerCylinder является BPB_NumHeads который равен 2-ум?

Да


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузчик!
СообщениеДобавлено: 25 авг 2013, 15:17 

Зарегистрирован: 24 авг 2013, 22:58
Сообщения: 33
эта отладка затянулась уже минут на 15, дофига текста идет с содержимым регистров, памяти и т.д и не останавливается


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 59 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 105


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB