Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2017, 18:20   #1
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию Выделение памяти под приложение.

Здравствуйте, форумчане.
Начну с пояснения:
Загружаюсь на чистом железе. Со старта загружается MBR, потом bootmgr (самописный), т.к. использую загрузочную NTFS. Далее в bootmgr идёт поиск elf файла на диске, найдя файл Program.com типа elf надо загрузить код в память.
Вопрос как правильно всё организовать(код не прошу)?

У меня была идея:
Загрузить файл по адресу 0600h:0000h
Считать описатель файла.
В описателе найти с какого адреса начинается код, к примеру "CS:0100h"
И загрузить его по адресу 0800h:0000h
Также найти где данные(CS:0700h)и загрузить по адресу 0800h:0700h
Стэк задавать стандартный SS=0500h;IP=0000h
И затем передавать управление на 0800h:0000h.

Но тут проблема, как быть с программами которые будут к примеру 100КБ или в диапазоне адресов 0100h:0000h - 7000h:FF00h?

Можете подсказать в чём я ошибаюсь или как действовать примерно.

Спасибо.
Nikolay2015 вне форума Ответить с цитированием
Старый 08.12.2017, 19:53   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Сделать маленькую прогу, которая впишется в ограничения.
Эта прога в свою очередь загрузит и запустит все что нужно, хоть 100КБ, хоть 100МБ.
По сути, загрузчики современных ОС так и работают.
waleri вне форума Ответить с цитированием
Старый 08.12.2017, 20:34   #3
Nikolay2015
Пользователь
 
Регистрация: 23.08.2017
Сообщений: 59
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Сделать маленькую прогу, которая впишется в ограничения.
Эта прога в свою очередь загрузит и запустит все что нужно, хоть 100КБ, хоть 100МБ.
По сути, загрузчики современных ОС так и работают.
Допустим, но а как мне из проги 10КБ (т.к. реальный режим 1 МБ всего) загрузить к примеру прогу 100,200 и т.д. КБ , а потом вернуться обратно в программу 10КБ.

Использовать call? Или класть в стэк адрес куда возвращаться и с помощью jmp far прыгать на адрес в стэке?
Nikolay2015 вне форума Ответить с цитированием
Старый 10.12.2017, 21:42   #4
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Цитата:
Сообщение от Nikolay2015 Посмотреть сообщение
Использовать call? Или класть в стэк адрес куда возвращаться и с помощью jmp far прыгать на адрес в стэке?
А в чём разница? call - это push + jmp и есть.
Почему в 0600h:0000h? Там нолик не лишний после 60 ?
Стандартную программу ты не запустишь из boot-сектора, т.к. почти все проги используют DOS-функции (как минимум для выхода). Так что делай свою прогу, использующую только возможности BIOS и грузи её по фиксированному адресу и всё. Как загрузчик DOS грузит IO.SYS.
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 10.12.2017 в 21:45.
7in вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение памяти под матрицу yakimechik Общие вопросы C/C++ 1 22.01.2016 08:33
Выделение памяти под структуру. Си Vitany Помощь студентам 0 05.12.2012 17:50
выделение памяти под объект VIK_aka_TOR Общие вопросы Delphi 4 15.02.2012 19:20
Выделение памяти под массив указателей Анка291 Общие вопросы C/C++ 9 25.02.2011 00:03
выделение памяти под массив на C Kingdom_Reborn Помощь студентам 12 12.01.2011 04:40