Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Запуск одной программы из другой



Для запуска дочерней программы служит функция 4Bh, прерывания 21h.

AH=4Bh

AL=0

ES:BX=адрес блока параметров

DS:DX=адрес имени программы в формате ASCIIZ формате

Ошибка CF=1

Блок параметров занимает 7 слов:

Первое слово – адрес нового сегмента окружения

Два слова – адрес хвоста программы. Четыре слова – в настоящее время не используются.

Пример. Блок параметров и новое окружение программы.

parmblk dw envseg

dd cmdtail

4 dw dup(0)

cmdtail db 9,’ FILE.TXT’,0Dh

envseg segment ‘ENVIR’

db ‘WORK=c:\tem\t.dat’,0

db 0

envseg ends

Предварительно, перед запуском новой программы, нужно освободить лишнюю память с помощью функции 4Ah. Данная функция требует указания размера памяти, который занимает родительская программа. Для реального определения размера программы в формате ЕХЕ ее замыкают фиктивным сегментом и применяют команду sub для вычитания из адреса фиктивного сегмента адреса начала программы.

AH=4Ah

BX=блок в параграфах

ES=сегментный адрес модифицируемого блока

Ошибка CF=1

Пример запуска программы.


;EXE program

codesg segment 'CODE'

assume CS: codesg,DS:

datasg,SS: stacksg

begin:

mov AX,datasg

mov DS,AX

;----------------------------

mov AX,fict;адрес

;фиктивного сегмента

mov BX,ES;адрес PSP

;программы

sub AX,BX;размер

;программы

;----------------------------

mov BX,AX;освобождение

;памяти

mov AH,4Ah

int 21h

;----------------------------

push DS:ES -> DS

pop ES

mov AH,4Bh

mov AL,0

mov BX,offset parmblk

mov DX,offset procname

int 21h;запуск дочерней

;программы

jc errex

jmp fin

;-----------------------------

errex:;ошибка запуска

mov AH,09h

mov DX,offset mes

int 21h

fin:

mov AX,4C00h

int 21h

codesg ends

datasg segment 'DATA'

parmblk dw 7 dup (0)

;дочерняя программа

procname db 'proc.exe',0

mes db 'Error!!!',10,13,'$'

;-------------------------

datasg ends

stacksg segment stack 'STACK'

dw 128 dup (0)

stacksg ends

;фиктивный сегмент

fict segment 'FICT'

fict ends

end begin






Дата публикования: 2014-11-18; Прочитано: 239 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...