int 21h
quit:
mov ah,09h
lea dx,soobsh
int 21h
mov ah,08h
int 21h
mov ah,4ch
int 21h
code ends
zseg segment
zseg ends
end nach
Результат роботи програми:
Управління повернено дочірній програмі
Програма вернула управління системі.
#include <process.h>
#include <iostream.h>
#include <conio.h>
#include <errno.h>
#pragma argsused
int main (int argc,char *argv[])
{
clrscr ();
cout << "It's Spawn" << endl;
spawnl (P_WAIT,"d:\\temp\\spo13.exe",0);
cout << "End Spawn" << endl;
getch();
cout << "It's System" << endl;
system ("dir");
cout << "End System" << endl;
getch();
cout << "It's Execl" << endl;
execl ("d:\\temp\\spo13.exe",0);
cout << "End Execl" << endl;
return 0;
}
Результат виконання програми:
It's Spawn
End Spawn
It's System
Volume in drive C is VIRUS
Volume Serial Number is A41B-C8D7
Directory of C:\
DOCUME~1 <DIR> 04.04.01 1:42
PCADDRV SYS 115 13.10.01 14:59
PROGRA~1 <DIR> 04.04.01 1:44
PROGRA~2 <DIR> 28.10.01 15:05
WINNT <DIR> 04.04.01 1:32
WORK <DIR> 02.04.01 16:41
6 file(s) 115 bytes
5210112 bytes free
End System
It’s Exec
Як видно з результату роботи програми функія Spawnl завнтажує дочірню програму і чекає доки та закінчить своє виконання та поверне управління батьківському процесу, функція System виконує DOS команду після якої повертає управління батьковському процесу, функція Execl закриває батьківський процес та передає управління дочірньому процесу після закінчення якого управління передається системі
Висновок: Були ознайомлені з способами написання програм, якіб виконували запуск дочірних програм.
Звіт з лабораторної роботи № 12.
“Драйвери ДОС”
Мета роботи: Продивитися список драйверів, що в даний час знаходяться у ПЕОМ.
Індивідуальне завдання: Визначити драйвери у пам'яті комп’ютера на своєму місці..
Опис програми:
Основна функція main ( ) продивляється список драйверів i виводить на екран iнформацію про них за допомогою допоміжних функцiй.
Функцiя clrbuf(void) читає символи з буферу клавiатури, доки вiн не спорожнiє .
Функцiя Memw(x,y,xr,yr) використовуїться для звернення до вiдеопам'ятi функцій.
Функцiя Rmmw та Clrw використовуються для звернення до вiдеопам'ятi
Функцiя Fldrv (void) розглядаї побiтно байт атрибуту драйвера i може видавати iнформацiю у вiдповiдностi до значенням атрибуту.
Текст програми:
struct DR_HEAD { /* заголовок драйвера */
struct DR_HEAD *next;
word attr, strat_addr, intr_addr;
char name[8];
} *drv; /* адреса поточного драйвера */
struct DR_HEAD *clock, *con; /* Адреса CLOCK$ i CON */
union REGS rr;
struct SREGS sr;
int i, y, y1;
void clrbuf(void){ while(kbhit()) getch();}
byte GetSym(x1,y1){ return(peekb(VSEG,y1*160+x1*2));}
byte GetAtr(x1,y1){ return(peekb(VSEG,y1*160+x1*2+1));}
void PutSym(x1,y1,sym){ pokeb(VSEG,y1*160+x1*2,sym);}
void PutAtr(x1,y1,atr){ pokeb(VSEG,y1*160+x1*2+1,atr);}
void MemW(x,y,xr,yr)
{
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
bm[i][j][0]=GetSym(i,j);
bm[i][j][1]=GetAtr(i,j);
}
}
void RmmW(x,y,xr,yr)
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
PutSym(i,j,bm[i][j][0]);
PutAtr(i,j,bm[i][j][1]);
}
}
void ClrW(x1,y1,x2,y2,s,a)
{
int i,j;
for (j=y1;j<y2;j++)
for (i=x1;i<x2;i++)
{
if (s!=0) PutSym(i,j,s);
PutAtr(i,j,a);
}
}
void FlDrv(void)
{
int xm,ym;
xm=wherex();
ym=wherey();
MemW(0,1,rx,ry);
ClrW(1,2,rx,ry,0,7);
ClrW(0,1,rx-2,ry-2,32,16);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.