![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Это всё зависит от компилятора, транслятора, линкера.
Вам надо собрать COM файл без включения сторонних библиотек. Читаете, думаете, пробовать. Далее делаете простой загрузчик COM или EXE-MZ и запуск как описано у Абеля в главе 22.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#12 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Вот к примеру туторил близкий к вашей задаче:
https://habrahabr.ru/post/173705/
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
![]() |
![]() |
![]() |
#13 |
Форумчанин
Регистрация: 25.01.2016
Сообщений: 105
|
![]()
Хорошо, тогда буду писать и ядро на ассемблере
|
![]() |
![]() |
![]() |
#14 | |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
timcryt, советую писать сразу нормальный загрузчик, чтоб он нёс в себе хоть-какую-то информацию, типа что происходит на данный момент. Но это уже на-усмотрение...
Чтоб иметь чёткую картинку, сначала разберёмся с адресами: Цитата:
1. Сбросить в нуль все сегментные регистры (ES/DS/SS). 2. Если код загрузчика будет юзать стек, то надо с ним определиться и указать в регистре(SP). Если стек загрузчику не нужен, то этот пункт можно пропустить. 3. Вывести мессагу, что бут-сектор на месте, и что приступаем к загрузке ОС. 4. При чтении оски с дискеты (INT-13h), нужно повторять операцию чтения пару/раз, т.к. с первого раза флоп может не считать сектор, а мы будем косить на криво/написаный код ОС. Это типичные задачи примитивного загрузчика. Вот собственно его код на FASM'е: Загрузчик в бут-секторе дискеты: Код:
Запомним, что он передаёт управление на адрес 600h. Теперь нужно записать этот загрузчик в бут дискеты...
Нашедшего выход - затаптывают первым..
|
|
![]() |
![]() |
![]() |
#15 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
Запись загрузчика на дискету
Для записи подойдёт любой HEX-редактор, который может работать с дисками. Я использовал HxD. Открываю в нём флоп и полученый бинарник. В окне бинарника копирую весь код в буфер, и установив в окне флопа курсор в ноль, жму [Ctrl+B]. Оставшееся пространство до адреса 200h забиваю нулями и вставляю в конце сектора сигнатуру 55АА. Всё! Наш лоадер благополучно расположился на дискете! Жмём [Ctrl+S] и флоп начинает мучительно записывать изменения на диск. Через 2-3 минуты можно протестить загрузчик в боевых условиях, загрузившись под эмулятором или из-под чистого доса (int-13 однако). У меня стоит "Microsoft Virtual PC", который прекрассно отрабатываем дисковый сервис. Теперь сама ОС.. Я не буду ничё мудрить, а просто выведу мигающее сообщение, что ОС благополучно загружена. Это сообщение будет означать, что мы всё сделали правильно и нигде не напортачили.. Код:
Загружаемся с дискеты и радуемся жизни!
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#16 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]() Цитата:
Он нужен БИОСу. Мягкие диски имеют такую вещь, как низкоуровневое форматирование. Поэтому БИОС считывает её логическую структуру с первого сектора. Если её выкинуть, то биос не сможет правильно читать диски. А также обязательным является признак загрузчика 55AAh. Если его нет, то БИОС просит вставить другой диск. Вы просто несможете загрузиться. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 03.03.2016 в 07:14. |
||
![]() |
![]() |
![]() |
#17 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
..биосу он по-барабану. Он нужен файловой системе.
Бивису нужна только загрузочная сигнатура и всё. А чё там дальше - пусть разбирается ОС.
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#18 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
После компиляции загрузчика получаем такой сектор, который можно записать на дискету и загрузиться с неё. В дампе только загрузчик, а остальное забито нулями и вставлена загрузочная сигнатура:
Код:
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#19 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
биосу нужна лишь загрузочная метка. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#20 |
Новичок
Джуниор
Регистрация: 20.03.2016
Сообщений: 5
|
![]()
Добрый вечер.
Нужна помощь специалиста. Есть 2 программы с расширением .s19 Нужно немного изменить. За деньги. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помощь в разработке! | Шибанов Антон | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 10 | 20.05.2015 12:11 |
Предложение по разработке российской ОС | VAST | Свободное общение | 39 | 12.05.2010 08:41 |
Проблемы при разработке | Ivan_32 | Свободное общение | 8 | 13.04.2010 12:45 |
помогите в разработке | shkipper | Общие вопросы по Java, Java SE, Kotlin | 5 | 08.04.2009 02:32 |