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

           int    21h

           jmp    quit

  no_delete:

            mov   ah,09h

            lea   dx,text_3

            int   21h

            mov   ah,08h

           int   21h

           jmp   quit

 err_49h:

            mov   ah,09h

           lea   dx,err_msg

            int   21h

            mov   ah,08h

            int   21h

  quit:

           ret

code        ends

            end   nach


Програма яка виконує контроль:

           .286

           title     RESIDENT   (файл - .com)

code       segment

           assume    cs:code

           org       100h   ; Создаем .com файл

  nach:

           pushf   

           pop ax

           or ax, 2048

           push ax

           popf    

           into

           ret

code        ends

            end   nach

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

Висновок: Було надбано навички у написанні резидентних програм та переадресуванні, функцій що виконують обробку переривань.


Лабораторная робота №8

“Дискові структури даних DOS”

Мета роботи: Отримання практичних навикiв при роботi з Таблицею Розмiщення Файлiв.

Індивідуальне завдання: Визначити номери усiх кластерiв диску, якi займає заданий викладачем файл у поточному каталозi.

Структура програми:

Програма складається  з головної функцiї main() та одинадцяти допомiжних функцiй.

void Read_Mbr(void) - функцiя читання MBR та пошук  потрiбного роздiлу.

void Read_Boot(void) - функцiя читання  boot-сектора.

void Read_Fat(void) - функцiя читання FAT.

void Read_13(void  *mem) - функцiя читання сектора за допомогою переривання 13.

void read_25(word size,dword sect,void*mem) - функцiя читання  сектора.

dword Clust_to_Sect(word  clust)  - функцiя визначення номеру сектора.

word Next_Clust(word  clust)  -  функцiя  вибiрки  наступного кластеру з FAT.

char *Get_Name(char *s,  char *d) - функцiя видiлення наступного елементу.

int Find_Name() - функцiя пошуку iменi у каталозi.

void End_of_Job(int n) – функцiя видачи повiдомлень  або аварiйного завершення.

Опис змiнних:

Фiзична дискова адреса:

struct DADDR {

  byte h;    // голiвка

  word s,    // сектор   

       t,    // дорiжка

       ts;   // сектор, дорiжка упакованi

};

Структура елемента роздiлу:

struct PART {

  byte  Boot,

        Begin_Hd;

  word  Begin_SecTrk; 

  byte  SysCode,      

        End_Hd;       

  word  End_SecTrk;   

  dword RelSec,  

        Size;  

};

Стpуктуpа Головного Завантажувального Запису:

struct MBR {

  char   LoadCode[0x1be];  /* програма завантаження */

  struct PART rt[4];       /* 4 елементи роздiлiв   */

  word   EndFlag;          /* пiдпис MBR            */

};

Структура для читання сектору з дiску,який займає  пам`ятi бiльше 32 Mбайт.

struct {

  dword first_sect;

  word count;

  byte *ptr;

}parm;

Структура корiнного запису:

struct BootRec {

  byte jmp[3], ident[8];

  word SectSize;

  byte ClustSize;

  word ResSect;

  byte FatCnt;

  word RootSize, TotSecs;

  byte Media;

  word FatSize, TrkSecs, HeadCnt;

  word HidnSecL, HidnSecH;

  dword LongTotSecs;

  byte Drive, reserved1, DOS4_flag;

  dword VolNum; char VolLabel[11], FatForm[8];

};

Структура елемента змiсту;

struct Dir_Item {

        char  fname[11];      /* iм`я файла          */

        byte  attr;           /* атрибут             */

        byte  reserved[10];

        word  time;           /* час                 */

        word  date;           /* дата                */

        word  cl;             /* номер 1-го кластера */

        dword size;           /* розмiр файла        */

};

Змiннi, глобальнi для усiєї програми:

         part - поточний елемент роздiлу;

         buff1[512] - буфер MBR та boot;

         *mbr - покажчик на таблицю роздiлiв;

         *boot - покажчик на корiнний запис;

         buff2[512] - буфер каталога та текста;

         *dir - покажчик на частину каталога;

         *text - покажчик на текстовий буфер ;

         *fat - покажчик  на FAT;

         job[81] - рядок-завдання;