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

               printf ("%+.2d  ",p_psp->JFT_ptr[i]);

       cout << endl << endl;

}

Результати роботи програми: в процесі роботи програма поширив свою таблицю відкритих файлів у префіксі програмного сегменту у системну таблицю файлів за рахунок чого вона отримала можливість працювати з 50 відкритими файлами одночасно. В результаті роботи програми було утворено 50 файлів з текстом “written”, та була виведена наступна інформація на екран:

Old JFT:

+07  +01  +01  +00  +02  +17  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01

JFT after resizing:

+07  +01  +01  +00  +02  +17  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

JFT after added new file:

+07  +01  +01  +00  +02  +17  +12  +13  +14  +15  +18  +19  +20  +21  +22  +23

+24  +25  +26  +27  +28  +29  +30  +31  +32  +33  +34  +35  +36  +37  +38  +39

+40  +41  +42  +43  +44  +45  +46  +47  +48  +49  +50  +51  +52  +53  +54  +55

+56  +57  +58  +59  +60  +61  +62  +63  -01  -01  -01  -01

JFT closed new file:

+07  +01  +01  +00  +02  +17  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

-01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01  -01

Висновок: в ході роботи ознайомилися с системними керуючими блоками ДОС та одержали практичні навички по роботі з ними.


Лабораторна робота № 6

«Оверлейні програми»

Мета роботи: Оволодіти механізмом завантаження та передачі управління оверлеїв. Придбати практичні навички в розрбці програм, що реалізують цей механізм.

Індивідуальне завдання: Розробити програму котра б виконувала завантаження оверлейної частини управління.

Опис програми: Пргограма виконує оверлійне заввантаження файла шлях до якого вказується в тексті програмі і зберегається в відповідній змінній. Виділення пам’яті під оверлейну частину програми відбувається за допомогою функції DOS 48h, звільнення виділеної пам’яті за допомогою функції DOS 49h, завантаження оверлейної частини в пам’ять за допомогою функції DOS 4B03h. На всюму шляху виконання програми відбуваються контроль за правильностью виконання функцій і в разі чого програма аварійно закінцеє своє виконання.

Текст програми:


           .286

           title     Оверлеи

           dosseg

           model     small

kol_para   equ       100h           

sts_size   equ       100h          

sts_para   =         sts_size/16    

          .stack    sts_size

          .data

path_1     db     'over#1.exe',0

path_2     db     'over#2.exe',0  

blk_parm   dd     ?              

error      db     'Ошибка',10,13,'$'

ovr_para   dw     ?            

code_seg   dw     ?       

adr_ovr    label  dword

ovr_offs   dw     ?              

ovr_seg    dw     ?              

k          dw     1

text       db     10,13,'   ( Нажмите любую клавишу )',10,13,'$'

.code

  nach:

     mov   ax,dgroup

     mov   ds,ax

     mov   code_seg,cs  

     mov   ax,es        

     mov   bx,ss        

     add   bx,sts_para  

     sub   bx,ax        

     mov   ah,4ah       

     int   21h           

     jc    err_msg

  m1:

     mov   ah,48h       

     mov   bx,kol_para  

     int   21h

     jc    err_msg

     mov   ovr_para,ax  

     mov   ovr_seg,ax   

     mov   word ptr blk_parm,ax    

     mov   word ptr blk_parm+2,ax  

     mov   ax,seg blk_parm         

     mov   es,ax                   

     mov   bx,offset blk_parm

     cmp   k,1

     ja    m2

     lea   dx,path_1    

     jmp   m3

  m2:

     lea   dx,path_2    

  m3:

     mov   ah,4bh

     mov   al,3         

     int   21h

     jc    err_msg

     call  adr_ovr      

     mov   bx,kol_para  

     mov   es,ovr_para  

     mov   ah,49h       

     int   21h          

     cmp   k,2

     je    quit

     mov   k,2

     jmp   m1

  err_msg:

     mov   ah,09h

     lea   dx,error

     int   21h

  quit:

     mov   ah,09h       

     lea   dx,text

     int   21h

     mov   ah,08h

     int   21h

     mov   ah,4ch

     int   21h

     end   nach