![]() |
|
![]() ![]() ![]() |
|
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Здравствуйте, возник вопрос о написании диспетчера загрузки ОС на TASM.
Смысл такой: 1) Вставляем флешку, на которой находится наша программа 2) В биосе выбираем загрузку с флешки 3) Запускается меню выбора того, что загрузить (ОС с винчестера или что нибудь еще), пути для запуска можно прописывать сразу. подскажите пожалуйста какую либо литературу по этому вопросу или может кто-то уже это делал и поделится исходником. |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Когда мы в БИОСе выбираем загрузку с флэшки, то загружается соответственна ОС, которая записана на флешке, в ее "загрузочном секторе". Для этого ненужен никакой диспетчер ОС - для этого нужен БИОС (который понимает флешки) и сама флеш-карта, на которой записана ОС. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Я наверно не так объяснил.
Наверно вы знаете комплекс для "реанимации" PC :Live CD или Live USB, так вот при выборе загрузки с флешки или диска, она сначало выводит список того, что можно загрузить, а именно: непосредственно винду с диска или с HDD, так же можно выбрать запуск каких либо программ. Еще пример, при установке Windows, на некоторых сборках тоже делают выбор что запустить, установку windows или какую нибудь программу. Так вот мне и надо, что бы при загрузке флешки было меню выбора запуска установленной на HDD Windows либо каких-то программ. Я больше не знаю как объяснить. |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Эти программы написаны я так понимаю под ДОС. Значит тогда вам нужно будет писать ДОС-совместимую операционную систему... ![]() Или взять флешку, средствами виндовс сделать из нею загрузочный диск MS-DOS, далее записать на неё те программы, которые будут выбираться из меню, затем пишем диспетчер загрузки, а в файл AUTOEXEC.BAT последними строками дописываем:
Что-бы пользователь имел дело только с диспетчером. А теперь самое главное как же его написать: 1) Что каксается организации вывода меню на экран, то с этим проблем не будет. Я даже видел исходник такой программы где-то. Там применюются в основном ф-ции прерываний 10h и 16h. 2) Загрузка программы. Для этого используйте ф-цию 4Bh прерывания int 21h 3) Выполнить загрузку с какого либо диска. с этим посложнее... Вот например int 19h выполняет загрузку ОС, но по-моему с только с диска, который был выбран для загрузки в БИОС. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Это всё конечно хорошо, но человек хочет сам написать
![]() -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Да, мне надо самому написать, просто это тема курсового проекта.
На счет меню, нету сложности, я уже его практически реализовал, сложность составляет только с запуском выбранной ОС. |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
А с запуском программы из меню нет сложности? Т.е. программа написана "под BIOS", в том смысле что в ней не используются сервисы ДОС?
Это сообщение отредактировал(а) iff - 24.10.2010, 19:15 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Эх, узнал я как надо и оказалось, все мои наработки можно выкинуть.
Нужно: 1) Написать код с помощью функций BIOS, который будет перекидывать на адрес в файловой системе, где загрузчик ОС 2) Записать этот код в загрузочный сектор флешки Нужно теперь разобраться, как найти адрес загрузчика ОС. Ну а чтобы протестировать, надо понять, как записать в загрузочный сектор Преподаватель сказал: код просмотреть через редактор, найти где начинается код функций, скопировать эти 0-и и 1, а потом как-то записать их в загр. сектор. Но вроде на СИ я видел такое. |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Где загрузчик?
В загрузочной записи. В ней данные со смещением 00h содержат инструкцию перехода к загрузчику, сам же загрузчик начинается со смещения 3Eh и может продолжаться до 1FFh. Т.е. фактически вам нужно перейти к выполнению команд записанных с адресом 00 (смещение команды, передающей управле6ние загрузчику). Загрузочная запись находится в самом начале диска (сторона 0, дорожка 0, сектор 1). Но вам нужно будет сначало загрузочную запись прочитать в оперативную память, регистр cs преровнять к тому сигменту оперативной памяти, куда считали запись, а регистр ip преровнять н 0000. НО. думаю что в БИОС есть уже прерывание и функции которые могут выполнить загрузку ОС с како-го либо диска и вам не придется все писать самим. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Да, есть прерывания, выполняющие загрузку, но как оказалось, мне до них еще далеко. Пробовал вывести обычное сообщение при загрузке, но для этого надо перевести как минимум в bin, а это чего-то не получается утилита exe2bin пишет, что не удается преобразовать файл, пробовал смотреть другие топики, та все примеры на nasm, а он сразу в bin кодирует. Может подскажете, что мне сделать, чтобы всё таки как-то запустить код написанный на TASM или может ошибка в коде и поэтому exe2bin ругается.
Вот код:
Думаю есть еще варианты, как записать загрузочный в загрузочный сектор, но понятных объяснений я нигде так и не нашел. |
|||
|
||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
1. при написание загрузщика у вас НЕТ ПРЕРЫВАНИЙ DOS!!! откуда там ему взяться?
2.
почитайте любую тему по "напсанию собственной оси" + про MBR. -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
iff |
|
||||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
TASM может сразу компилировать в COM. Для этого укажите параметро /t линкеру.
Да. Но вот еще есть другой вопрос
Эти программы тогда тоже не должны использовать прерываний DOS и других сервисов DOS. Более того вам придется ещё писать довольно сложный загрузчик (для загрузки EXE) -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
||||
|
|||||
Logree |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: 1 Всего: 2 |
автору нужно уточнить тему у преподавателя... что это за "остальные программы" под чем они должны запускаться и т д.
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
Fant87 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 9.2.2010 Репутация: нет Всего: нет |
Я всё уточнил, программы запускать не надо, необходимо только запустить диспетчер и выбрать какую ОС грузить. С запуском маленькой программы (выводящей букву) я справился. Вот только возникают вопросы:
1) Как сделать, чтобы загрузчик запустил еще один загрузчик с флешки, так как мне кажется, что если делать интерфейс, то не поместится в 512 байт 2) Как сделать выбор загрузки ОС, а именно: можно ли,чтобы BIOS нашел все ОС на дисках и потом как-то это вывести или как-то управлять вызовом ОС, а именно выбором диска поиска загрузочного сектора. Еще преподаватель сказал, что можно грузить адреса загрузчиков из файла, ток вот как это сделать и где взять эти адреса я не пойму. Я пока нашел только 2-а вроде подходящий прерывания: 1) int 18h - оно продолжает поиск загрузчиков на других носителя, но она не подходит, так как может надо выбрать не следующий диск, а последний например. 2) int 19h -это вроде подходит, только я не нашел описания как им пользоваться, нашел только то, что если после прерывания не находит загрузочный сектор, то вызывает int 18. Вот что получилось при попытке записаться в загр сектор:
Получается при загрузке выводится А, потом идет ожидания нажатия любой клавиши, а далее загрузка с другого носителя. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |