| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Как передать управление на код в другом сегменте |
| Автор: Merlin27 26.10.2006, 10:26 |
| Считываю .com-файл в память и хочу его запустить из ядра ОС. call far 2000h:100h jmp far 2000h:100h Выводят ошибку Illegal immediate. Че делать? ЗЫ. Ядро у меня в 1000h:100h, пытаюсь соответственно оттуда передать управление процессу. Подозревая что я чегото в синтаксисе намудрил или что? из загрузчика ведь перехожу на ядро командой call far 01000h:0100h. Ничче не понимаю. Может это изза того что в загрузчике IDEAL а в ядре нет? |
| Автор: Merlin27 26.10.2006, 11:53 | ||
Такс, как передать управление разобрался
А вот как вернуться обратно? |
| Автор: anwe 26.10.2006, 12:21 |
| Предварительно сохрани свои ds и es и в конце своей программки напиши тот же код, что ты и написал, только на сохраненный адрес. |
| Автор: Merlin27 26.10.2006, 18:12 |
| А как узнать адрес той команды куда должно вернуться управление? Я не знаю что задать как смещение в сегменте кода, чтобы вернуться в запускающую программу (после окончания работы запускаемой). |
| Автор: anwe 26.10.2006, 19:22 |
| Если запускаемую программу пишешь ты, до добавь в нее функцию, параметры которой будут браться из запускающей программы и вызови ее перед концом вызываемой. А параметры - необходимый адрес возврата. Если не твоя - отдельный разговор, совсем другое дело. |
| Автор: dumb 26.10.2006, 21:09 | ||||
либо так:
либо так:
|
| Автор: BNPmaster 26.10.2006, 21:58 |
| Бывает же такое... Я вот сам зашёл сюда чтобы это спросить. И тоже пишу учебную ОС для института, и загрузчик нам тот же дали для первой лабы, и ядро по тому же адресу располагается 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 27.10.2006, 16:04 | ||||
Понял раза с 5го
ВОТ ОНО! А я млин не додумался offset дописать. dumb, ты крут. 2 классных примера ;) BNPmaster, ты написал почти тоже самое что dumb... Про переключение режима не знал - прикольно Оффтоп: BNPmaster, а ты из какого города? В каком ВУЗе? Этот загрузчик у нас был в методичке... а выдран он из инета. На codenet.ru есть пример оси GlukOS. Вот оттуда и содрана наша методичка |