Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 28

           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);