|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.01.2023, 09:46 | #1 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
ОС: Как выполнить переход из bootloader на fasm в ядро на C\C#\C++?
Вот какое дело: имеется загрузчик на asm кто любопытный вот код:
Код:
Последний раз редактировалось Окоза-Окоза; 10.01.2023 в 09:30. |
09.01.2023, 13:51 | #2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Дело в том, что вы написали первичный загрузчик и сейчас кроме прерываний BIOS вам ничего не доступно.
По сути ваша программа сейчас ограничена 1Мб памяти в 16-битном реальном режиме работы процессора. Чтобы перейти к ядру написанному на другом языке вам надо: 1) Определить блок в оперативной памяти куда будет загружаться ядро 2) Оформить ядро на работу в этом блоке оперативной памяти 3) Считать с диска сектора, содержащие бинарный образ ядра в нужное место оперативной памяти 4) Осуществить дальний переход на стартовый адрес в этом ядре (который может быть указан в заголовке ядра или вычислен загрузчиком) Код:
Последний раз редактировалось macomics; 09.01.2023 в 13:54. |
10.01.2023, 09:28 | #3 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
Только где более подробную инфу брать?
|
10.01.2023, 09:33 | #4 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
И как загрузить кернель в ОЗУ по адресу? и тем более на C\C#\C++? Скорее всего будут asmовые вставки.
|
10.01.2023, 12:18 | #5 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Как-то так
Код:
Последний раз редактировалось macomics; 10.01.2023 в 12:52. |
10.01.2023, 12:55 | #6 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
А как тогда из кернеля на C сделать com? это просто приложение будет которое играет роль кернеля?
|
10.01.2023, 12:57 | #7 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
|
10.01.2023, 15:11 | #8 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Чтобы было больше, тогда надо загрузить большее чем 1 число секторов. Я показал как сделать самое сложное для вас. Цикл с загрузкой секторов напишите сами (надеюсь). И еще кое-что. Настройка процессора для работы с COM программой выглядит чуть сложнее. Точнее вот так
Код:
Последний раз редактировалось macomics; 10.01.2023 в 15:25. |
10.01.2023, 15:23 | #9 |
Пользователь
Регистрация: 09.01.2023
Сообщений: 19
|
Накуралесил. так сойдет? в архиве только код загрузчика.
|
10.01.2023, 15:29 | #10 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Так вы на FASM пишите или на NASM?
ADD: Выглядит работоспособным, но есть замечания. Стек слишком маленький и попадает на загруженный код. Его стоит переместить в конец сегмента (mov sp, 0xFFFE) Последний раз редактировалось macomics; 10.01.2023 в 15:48. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ядро программы С++ | kineziz | Общие вопросы C/C++ | 3 | 06.06.2012 23:06 |
Чем отличаеться fasm от fasm editor&? | TotKtoNado | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 07.11.2011 17:00 |
простейшее ядро | lem | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 28.09.2011 16:37 |
Стек и bootloader | kuraga1991 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 29.12.2010 22:17 |
Ядро | Adblock | PHP | 13 | 22.06.2010 21:16 |