|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.08.2010, 17:21 | #1 |
Регистрация: 31.08.2010
Сообщений: 7
|
Переход в нереальный режим в загрузчике
Требуется написать загрузчик ОС Windows c подсчётом контрольной суммы ROM BIOS. ROM BIOS Расположен в верхних областях памяти, начинаясь с адреса 0xfff80000. Загрузчик работает в реальном режиме. В реальном режиме адресация - 16разрядная, и память выше 1-ого мегабайта недоступна. Для данной задачи необходим сегмент данных размером 4 гб. Поэтому резонно перейти в нереальный режим.
В примерах перехода в нереальный режим пишется, что при смене режимов работы процессора нужно применять дальние переходы (far jump) и задейстовать другой сегмент кода. Может быть это работает в ОС DOS, но в загрузчике это приводит к перезагрузке компьютера даже при запрете всех прерываний. С ближними переходами переход в нереальный режим вроде как происходит и можно использовать 32-разрядную адресацию, но при обращении по адресу 0xfff80000 и выше можно получить лишь 0xffffffff, что не похоже на данные bios. То есть похоже на то, что старшее слово 32-битного адреса просто вырождается. Таким образом контрольная сумма ес-но получается разной каждый раз при загрузке. Ниже приведён код на fasm: Код:
Внимание, вопросы! (Чтобы не писали потом: а в чём же вопрос и чего я хочу) 1. Правильно ли произведён переход в нереальный режим? -Если правильно, то как правильно получить доступ к данным начиная с адреса 0xfff80000 -Если неправильно, то где ошибка 2. Как в реальном режиме в отсутствии ОС DOS получить доступ к данным по адресу 0xfff80000 и выше? Последний раз редактировалось Stilet; 01.09.2010 в 17:11. |
31.08.2010, 17:32 | #2 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
я не смотрела ваш код, но быть может пригодиться, код загрузчика защищенного режима есть в книге Зубкова
Единственное, что ограничивает полет мысли программиста-компилятор
|
31.08.2010, 20:44 | #3 |
Регистрация: 31.08.2010
Сообщений: 7
|
Я читал книгу Зубкова, но кода загрузчика там не встретил. Может разные издания? Уточните, пожалуйста, какое издание и если можно, то приведите этот код
|
01.09.2010, 17:00 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
надо перейти в защищенный, один из сегментных регистров поставить на линейный режим, потом вернутся обратно, и сегментный регистр не трогать(например fs)
Цитата:
сама GDT верна?(вам нужен кодовый сегмент и сегмент данных на все пространство(его селектор потом назначим fs)) линия A20 открыта?(помоему нет) переход в защищенный, только через дальный прыжок по <селектор кодового сегмента>:<смещение(относительно начала сегмента)> команда дальнего прыжка должна быть сразу после включение защищенного режима. посмотрите sasm.narod.ru (еще помню было в книге про аппаратное программирование, автора не помню) то что мне не нравится я выделил смайлами. посмотрите у нас темы про разработку ОС(две темы существует) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
02.09.2010, 00:12 | #5 |
Регистрация: 31.08.2010
Сообщений: 7
|
А на каком участке включать 20-ый вентиль?
|
02.09.2010, 00:24 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
до попытки перехода в PM
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
03.09.2010, 14:08 | #7 |
Регистрация: 31.08.2010
Сообщений: 7
|
Переработал код, используя при переключении режимов дальние переходы, но проблема чтения верхних областей памяти по-прежнему осталась, вдобавок прерывания (установка видеорежима или чтение клавиатуры) приводят к зависанию компьютера. Вот код:
Код:
From Stilet: Некорректно в этом коде то что ты его не оправил форматированием, принятым здесь для кода по кнопке # Последний раз редактировалось Stilet; 03.09.2010 в 14:22. |
03.09.2010, 14:34 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
странно, с виду все верно.
под Bochs проверяли? http://sasm.narod.ru/docs/pm/pm_in/chap_10.htm это о возврате в режим реальных адресов. советую всетаки скачать ту книгу что я сказал(помоему и есть Зубков) это в разделе недокоментированных возможностей процессора(примерно так) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
режим отключения | Neostryak | Microsoft Office Access | 0 | 24.05.2010 14:44 |
переход в реальный режим и обратно [Assembler] | Айат | Помощь студентам | 8 | 11.04.2009 01:43 |
Полноэкранный режим | Devoto | Общие вопросы Delphi | 4 | 05.12.2008 13:42 |
многопользовательский режим | Nastay | Помощь студентам | 1 | 04.04.2008 19:57 |
переход в полноэкранный режим | andrey4623 | Общие вопросы Delphi | 7 | 11.03.2008 09:28 |