Вопрос № 23596: Здравствуйте!
Подскажите пожалуйста (с подробностями, асм понимаю, хоть в хитростях не искушен).
Мне нужно загрузить в память дочернюю программу из материнской, а потом ее выполнить, вернувшись после обратно в материнскую. Причем...
Вопрос № 23.596
Здравствуйте!
Подскажите пожалуйста (с подробностями, асм понимаю, хоть в хитростях не искушен).
Мне нужно загрузить в память дочернюю программу из материнской, а потом ее выполнить, вернувшись после обратно в материнскую. Причем нужно передавать и получать данные как в функции. Дочерний код, нужно разместить в отдельном сегменте.
Как, собственно, загрузить код, мне понятно.
Но как выбрать сегмент для загрузки, я не знаю. Есть какое-то прерывание или, что там еще?
С передачей данных я вероятно разберусь использовав стек, или же выделю для этого блок памяти в том же самом сегменте, хотя буду благодарен за дельные советы.
Материнская прога для доса.
Отправлен: 16.07.2005, 19:24
Вопрос задал: Артем Талипов (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Евгений Иванов
Здравствуйте, Артем Талипов!
это называется резидентная программа.
обмен данными идёт через прерывания.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 16.07.2005, 19:31 Оценка за ответ: 3
Отвечает: Стас
Здравствуйте, Артем Талипов!
Дочерняя твоя? Или нет? Если твоя то есть много способов передать ей данные.
Если нет то все зависит от того как программа получает эти данные, может клавиатуру эмулировать прийдется, или в файл писать...
А сегмент может быть любой, какой свободный даст система тот и будет ей местом.
Если это готовый EXE файл то загрузить его на выполнение можно функцией 4bh 21h прерывания.
Вход: AH=4bH
DS:DX=адрес строки ASCIIZ с именем файла, содержащего программу
ES:BX=адрес EPB (EXEC Parameter Block - блока параметров EXEC)
AL= 0 = Загрузить и выполнить
AL= 3 = Загрузить программный оверлей
Выход = AX - код ошибки если CF установлен
Ответ отправил: Стас (статус: Практикант)
Отправлен: 17.07.2005, 00:26 Оценка за ответ: 5