Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Текст программы. /*-------Лабораторная работа N8----------------*/





/*-------Лабораторная работа N8----------------*/

/*---"Главная загрузочная запись"--------------*/

/* Стандартные заголовки */

#include <dos.h>

#include <conio.h>

 

/* Типы данных */

 

#define byte unsigned char

#define word unsigned int

#define dword unsigned long

void read_MBR(void); /* Чтение MBR */

/* Получение из упакованного SecTrk # сектора */

#define SECT(x) x&0x3f

/* Получение из упакованного SecTrk # дорожки */

#define TRK(x) (x>>8)|((x<<2)&0x300)

 

/* структура элемента раздела */

struct Part {

byte ActFlag; /* признак активного раздела */

/* физический адрес начала раздела */

byte Begin_Hd; /* # головки */

word Begin_SecTrk; /* # сектора и дорожки */

byte SysCode; /* код системы */

/* физический адрес конца раздела */

byte End_Hd; /* # головки */

word End_SecTrk; /* # сектора и дорожки */

dword RelSec; /* # сектора початку */

dword Size; /* количество секторов */

};

/* стpуктуpа главной загрузочной записи */

struct MBR {

char LoadCode[0x1be]; /* пpогpамма загрузки */

struct Part rt[4]; /* 4 эл-та pазделов */

word EndFlag; /* подпись MBR */

} mbr;

/* дополнительные переменные */

int x=10,y; /* экpанные кооpдинаты */

byte head=0; /* номеp головки (0) */

word Sect_Trk=1; /* номеp доpожки и сектоpа (0,1) */

int ndrive=0; /* номеp логического диска */

word *EndList; /* указатель на подпись */

union REGS rr;

struct SREGS sr;

word i;

/*-----------------------------------------------*/

main()

{

textbackground(0);

clrscr();

textattr(0x0a);

cprintf(" Лабораторная работа N8");

gotoxy(1,2);

cprintf(" Главная загрузочная запись");

textattr(12);

gotoxy(30,4);

cprintf("Разделы жесткого диска:\n");

gotoxy(1,6);

textattr(11);

cprintf("Лог.диск -----> \n\r");

cprintf("Признак ------> \n\r");

cprintf("Код системы --> \n\r");

cprintf("Начало: гол.--> \n\r");

cprintf(" дор.--> \n\r");

cprintf(" сект.-> \n\r");

cprintf("Конец: гол.--> \n\r");

cprintf(" дор. -> \n\r");

cprintf(" сект.-> \n\r");

cprintf("Нач.сектор ---> \n\r");

cprintf("Размер -------> \n\r");

textcolor(11);

NEXT:

read_MBR();

for (EndList=(word *)&mbr.rt[(i=0)];

(*EndList!=0xaa55)&&(mbr.rt[i].Size>0L);

EndList=(word *)&mbr.rt[++i])

{

/* кооpдинаты куpсоpа */

y=6;

x+=7;

gotoxy(x,y++);

if (mbr.rt[i].SysCode==5)

{textattr(13);

cprintf("Ext ");

 

}

else

textattr(12);

cprintf("%-7c",'C'+ndrive++);

 

gotoxy(x,y++); textattr(14);

cprintf("%02xH ",mbr.rt[i].ActFlag);

gotoxy(x,y++); textattr(15);

cprintf("%-7d",mbr.rt[i].SysCode);

gotoxy(x,y++); textattr(14);

cprintf("%-7d",mbr.rt[i].Begin_Hd);

gotoxy(x,y++); textattr(15);

cprintf("%-7u",TRK(mbr.rt[i].Begin_SecTrk));

gotoxy(x,y++); textattr(14);

cprintf("%-7u",SECT(mbr.rt[i].Begin_SecTrk));

gotoxy(x,y++); textattr(15);

cprintf("%-7d",mbr.rt[i].End_Hd);

gotoxy(x,y++); textattr(14);

cprintf("%-7u",TRK(mbr.rt[i].End_SecTrk));

gotoxy(x,y++); textattr(15);

cprintf("%-7u",SECT(mbr.rt[i].End_SecTrk));

gotoxy(x,y++); textattr(14);

cprintf("%-7lu",mbr.rt[i].RelSec);

gotoxy(x,y++); textattr(15);

cprintf("%-7lu",mbr.rt[i].Size);

if (mbr.rt[i].SysCode==5)

{

/* если код системы 5, pаздел содержит свою таблицу pазделов; определяется ее дисковый адpес, и новая таблица считывается в память */

head=mbr.rt[i].Begin_Hd;

Sect_Trk=mbr.rt[i].Begin_SecTrk;

goto NEXT;

}

}

gotoxy(x,y++);

textattr(10+128);

gotoxy(29,18);

 

cprintf("Нажмите любую клавишу...");

getch();

}

 

/*-----------Читання MBR------------------------*/

void read_MBR(void)

{

rr.h.ah=2; /* Чтение */

rr.h.al=1; /* Секторов 1 */

rr.h.dl=0x80; /* Жесткий диск */

rr.h.dh=head; /* Головка */

rr.x.cx=Sect_Trk; /* Дорожка, сектор */

sr.es=FP_SEG(&mbr); /* Адрес буфера в ОП */

rr.x.bx=FP_OFF(&mbr);

int86x(0x13,&rr,&rr,&sr);

/* Проверка ошибок чтения */

if (rr.x.cflag)

{

printf("Ошибка чтения: %x. ",rr.h.ah);

printf("Нажмите любую клавишу...\n\7");

getch();

exit();

}

}







Date: 2015-05-22; view: 542; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию