![]() |
|
|
![]()
|
|
| Felt |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 14.6.2004 Репутация: нет Всего: нет |
Привет народ.
Я хочу поместить программу на асемблере на дискету и выполнить ее при загрузке компа с дискеты. Можно ли написать и проверить такую прогу из под Windows, а потом как-нибудь переписать программу, оставив только двоичый код, необходимый для загрузки компа (ведь в экзешнике хранятся еще и заголовки и другая муть)? Можно ли написать такую прогу на FASM, ну или в крайнем случае на MASM32. Как? Каким образом можно скопировать созданную программу на дискету (желательно код на Delphi, хотя и на C++ тоже сойдет)? Извините за ламерские вопросы, просто я мало что знаю об асме, а мне нужно просто написать некоторую полезную инфу при запуске компьютера с дискеты, т. е. никаких событий, связанных с работой мыши или клавиатуры там не будет. |
|||
|
||||
| D0lphin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.5.2005 Где: Кемерово Репутация: нет Всего: нет |
Гхм, постараюсь ответить...
Зачем тебе exe-шник? Можно сделать так: В fasm пишешь что тебе надо, ну пусть для определенности: start: mov ax, 0xb800 mov es, ax mov [es:0x0], dword 0x1F291F3A loop1: jmp loop1 Компилишь, получаешь бинарник. С помощью RawWrite переписываешь на дискету, запускаешь VirtualPC....и улыбаешься Все так? ;) |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
но ведь файл, который создает fasm привязан к конкретной ОС (DOS, Windows). А в том случае если я запускаюсь при включении компа, ОС еще не загружена. Получается что моя прога - это аналог ОС. Нужно чтобы там располагались только код без заголовков. И потом, чтобы запустить такую прогу BIOS смотрит на какой то адрес, т. е. прежде чем запускать, он сначала считывает с определенного места диска инфу, а потом запускает. Так вот откуда он ее считывает и что там нужно разместить.
|
|||
|
||||
| D0lphin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 7.5.2005 Где: Кемерово Репутация: нет Всего: нет |
Ты бы сначала попробовал, что-ли...
Фасм создает бинарник, т.е. просто двоичные инструкции процессору. Единственное к чему они привязаны это х86 архитектура. Как я написал выше - все работает. Если уж тебе так интересно, то после проверки биосом подключенного оборудования управление передается процедуре начальной загрузки с дисков. Она загружает первый сектор с нулевой дорожки нулевой головки, размещая его в памяти по адресу 7С00h, и передавая управление после загрузки сектора по этому же адресу. Ответственность за дальнейшую загрузку компьютера ложится на код, содержащийся в этом секторе. Вот. Понятно? |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Только еще нужно учесть что проц не в "защищённом режиме", менеджера памяти(страницы) еще нет, прерывания не обрабатываються, т.е. вообще ничего нет...
Зачем такой изврат, не проще ли под DOS'ом загрузиться? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Как правильно указал D0lphin, при загрузке компа BIOS может смотреть на то, можно ли грузить с дискеты так называемый BOOT-сектор.
Это настраивается в BIOS setup, если надо, чтобы BIOS смотрел дисковод, ну или - для извращенцев - руками CMOS править ;) Далее. Когда ты делаешь "sys a:", то записывается прежде всего тот самый boot-сектор, он должен быть в определенном формате: первый код - jmp, обходящий таблицу в конце - маркер dw 55AAh Подробнее - см. любой бут-вирус, статьи по этому поводу, книга Коваля "как написать компьютерный вирус" и проч. Если ты записал в нужный сектор дискеты все в верном формате, то BIOS загрузит твой бут в 0000:7C00 и далее... на твое усмотрение. Например, досовский BOOT далее считывает несколько секторов в область чуть ниже себя и отдает им управление. Те он работает на уровне кусков кода, которые хранятся в некоторых секторах дискеты. Можешь записывать их куда хочешь, например в следующие за бутом сектора или еще куда, только если ты не хочешь порезать оригинальный системный код от команды sys a:, то с выбором секторов надо быть осторожным. Весь такой код должен быть перемещаемым, те он должен уметь работать будучи загруженным с любого адреса. Для этого обычно пишут в формате *.com, те обычный файл, в начале идет вычисление текущего адреса: call GetOfs pop si ; si= offset "pop si" -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Отладка кода под "Windows".
Конечно, можно написать смело свой код и засунуть его в BOOT дискеты. Но вот для отладки придется с нее загрузиться, а это долго, особенно если отлаживается сложный алгоритм, который работает после старта boot. Я использовал так называемый "загрузчик", это простая прога, которая читает с файла содержимое сектора (512 байт) по адресу cs:7c00 и передает ему управление. Те она как бы имитирует действия BIOS. Для примера выдерни из системной дискеты boot в такой файл и посмотри в отладчике, как он себя ведет. Старайся написать что-то подобное его действиям, но там много лишнего, так как - уже говорил - его основная задача это загрузка DOS. Это сообщение отредактировал(а) Chingachguk - 8.5.2005, 00:50 Присоединённый файл ( Кол-во скачиваний: 10 )
Mbrtrace.asm-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |