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] - рядок-завдання;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.