Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать управление на код в другом сегменте, Загрузка и запуск процесса в учебной ОС 
V
    Опции темы
Merlin27
  Дата 26.10.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



Считываю .com-файл в память и хочу его запустить из ядра ОС.
call far 2000h:100h
jmp far 2000h:100h

Выводят ошибку Illegal immediate. Че делать?

ЗЫ. Ядро у меня в 1000h:100h, пытаюсь соответственно оттуда передать управление процессу.

Подозревая что я чегото в синтаксисе намудрил или что? из загрузчика ведь перехожу на ядро командой call     far 01000h:0100h. Ничче не понимаю. smile 
 Может это изза того что в загрузчике IDEAL а в ядре нет?

Это сообщение отредактировал(а) Merlin27 - 26.10.2006, 10:28
PM MAIL   Вверх
Merlin27
Дата 26.10.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



Такс, как передать управление разобрался
Код

    mov ax,2000h
    mov bx,100h
    push ax
    push bx
    mov ds,ax
    mov es,ax
    retf


А вот как вернуться обратно?  smile 
PM MAIL   Вверх
anwe
Дата 26.10.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Предварительно сохрани свои ds и es и в конце своей программки напиши тот же код, что ты и написал, только на сохраненный адрес.
PM MAIL   Вверх
Merlin27
Дата 26.10.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



А как узнать адрес той команды куда должно вернуться управление? Я не знаю что задать как смещение в сегменте кода, чтобы вернуться в запускающую программу (после окончания работы запускаемой).
PM MAIL   Вверх
anwe
Дата 26.10.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Если запускаемую программу пишешь ты, до добавь в нее функцию, параметры которой будут браться из запускающей программы и вызови ее перед концом вызываемой. А параметры - необходимый адрес возврата.
Если не твоя - отдельный разговор, совсем другое дело.
PM MAIL   Вверх
dumb
Дата 26.10.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



либо так:
Код

; вызываемая процедура должна просто сделать retf
; ...
    push es ; сохраняем сеги
    push ds
    push cs ; на стек адрес для возврата из процы
    push offset ret_point
;
    mov ax,2000h
    mov bx,100h
    push ax
    push bx
    mov ds,ax
    mov es,ax
    retf
;
ret_point:
    pop ds
    pop es


либо так:
Код

procofs dw 100h
procseg dw 2000h
;...
    call dword ptr procofs
;...


PM MAIL   Вверх
BNPmaster
Дата 26.10.2006, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
Merlin27
Дата 27.10.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 1.10.2006

Репутация: нет
Всего: нет



Цитата

Если запускаемую программу пишешь ты, до добавь в нее функцию, параметры которой будут браться из запускающей программы и вызови ее перед концом вызываемой. А параметры - необходимый адрес возврата.
Если не твоя - отдельный разговор, совсем другое дело.

Понял раза с 5го smile Конечно я о том же думал, я не знал как найти адрес точки возврата.

Цитата

    push offset ret_point

ВОТ ОНО! А я млин не додумался offset дописать.

dumb,  ты крут. 2 классных примера ;)


BNPmaster, ты написал почти тоже самое что dumb... Про переключение режима не знал - прикольно smile. Вот мне только интересно как ты свободно лазиишь в нулевом сегменте... там же вроде данные BIOS'a. 

Оффтоп: BNPmaster, а ты из какого города? В каком ВУЗе? Этот загрузчик у нас был в методичке... а выдран он из инета. На codenet.ru есть пример оси GlukOS. Вот оттуда и содрана наша методичка smile


Это сообщение отредактировал(а) Merlin27 - 28.10.2006, 15:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0750 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.