![]() |
|
![]() ![]() ![]() |
|
Merlin27 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.10.2006 Репутация: нет Всего: нет |
Считываю .com-файл в память и хочу его запустить из ядра ОС.
call far 2000h:100h jmp far 2000h:100h Выводят ошибку Illegal immediate. Че делать? ЗЫ. Ядро у меня в 1000h:100h, пытаюсь соответственно оттуда передать управление процессу. Подозревая что я чегото в синтаксисе намудрил или что? из загрузчика ведь перехожу на ядро командой call far 01000h:0100h. Ничче не понимаю. ![]() Может это изза того что в загрузчике IDEAL а в ядре нет? Это сообщение отредактировал(а) Merlin27 - 26.10.2006, 10:28 |
|||
|
||||
Merlin27 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.10.2006 Репутация: нет Всего: нет |
Такс, как передать управление разобрался
А вот как вернуться обратно? ![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Предварительно сохрани свои ds и es и в конце своей программки напиши тот же код, что ты и написал, только на сохраненный адрес.
|
|||
|
||||
Merlin27 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.10.2006 Репутация: нет Всего: нет |
А как узнать адрес той команды куда должно вернуться управление? Я не знаю что задать как смещение в сегменте кода, чтобы вернуться в запускающую программу (после окончания работы запускаемой).
|
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Если запускаемую программу пишешь ты, до добавь в нее функцию, параметры которой будут браться из запускающей программы и вызови ее перед концом вызываемой. А параметры - необходимый адрес возврата.
Если не твоя - отдельный разговор, совсем другое дело. |
|||
|
||||
dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 4 Всего: 158 |
либо так:
либо так:
|
||||
|
|||||
BNPmaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
Бывает же такое...
Я вот сам зашёл сюда чтобы это спросить. И тоже пишу учебную ОС для института, и загрузчик нам тот же дали для первой лабы, и ядро по тому же адресу располагается 1000:100h. Я НЕ ШУЧУ!!!! Ну я вроде уже разобрался как это сделать. Предположим функция располагается по адресу 0h:1100h, тогда xor ax,ax mov es,ax mov es:[3102h],ax mov ax,1100h mov es:[3100h],ax mov bx,3100h call [dword ptr es:[bx]] Если планируется обращаться всегда по одному и тому же адресу, то можно и как в этом загрузчике. Если не нравится режим IDEAL, то его можно включать только для компиляции этой строки. К примеру .CODE ассемблерный текст ................................ IDEAL call far ptr 0h:1100h MASM ;включение режима MASM ........................... для возврата из подпрограммы - retf |
|||
|
||||
Merlin27 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 1.10.2006 Репутация: нет Всего: нет |
Понял раза с 5го ![]()
ВОТ ОНО! А я млин не додумался offset дописать. dumb, ты крут. 2 классных примера ;) BNPmaster, ты написал почти тоже самое что dumb... Про переключение режима не знал - прикольно ![]() Оффтоп: BNPmaster, а ты из какого города? В каком ВУЗе? Этот загрузчик у нас был в методичке... а выдран он из инета. На codenet.ru есть пример оси GlukOS. Вот оттуда и содрана наша методичка ![]() Это сообщение отредактировал(а) Merlin27 - 28.10.2006, 15:47 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Asm: Общие вопросы" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |