АХ. Якщо він дорівнює 1, то виводимо строку “SOPROCESSOR 8087” і переводимо курсор на нову строку .
Перевіряємо значення бітів 2 і 3 регістру АХ. Якщо вони дорівнюють 0, то переходимо на перевірку наступних бітів. Якщо біт 3=0 і біт 2=1 виводимо строку “MEMORY:Kb16”; якщо біт 3=1 і біт 2=0 виводимо строку “MEMORY:Kb32”; Якщо біт 3=1 і біт 2=1 виводимо строку “MEMORY:Kb64” і переводимо курсор на нову строку.
Якщо біт 8 регістру АХ дорівнює 1, виводимо строку “DMA Present” і переводимо курсор на нову строку.
Перевіряємо значення бітів 14 і 15 регістру АХ. Якщо вони дорівнюють 0, то переходимо на кінець програми, інакше виводимо строку “LPT:”. Якщо біт 15=0 і біт 14=1 виводимо число 1; якщо біт 15=1 і біт 14=0 виводимо число 2; якщо біт 15=1 і біт 14=1 виводимо число 3.
Висновки
В результаті виконання курсового проектування було написано програму системного загрузчика який здійснює ревізію конфігурації комп’ютера та виводить отриману інформацію на екран, та програму запису системного загрузчика, програми в загрузочну область. Наведено блок-схему програми системного загрузчика ревізії конфігурації комп’ютера, подано її опис функціонування. Текст програми системного загрузчика написано на мові Assembler; текст програми запису програми в загрузочну область написано на мові С.
Перелік використаних літературних джерел
Зубков С.В. Assembler для DOS, Windows и UNIX –3-e изд., стер. – М.:ДМК Пресс; СПб.:Питер, 2004.–608с.
Системное программное обеспечение. Учебник для вузов/ А. Ю. Молчанов.– СПб.:Питер, 2003.–396с.
Велихов А.В. Макроассемблер: Создание и отладка программ.– М.:Майор, 2001.–192с.
Додатки
Додаток А
прогама запису системного загрузчика, програми в загрузочну область
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <ctype.h>
int main (void)
{
union REGS reg;
struct SREGS segreg;
char b[512],*q;
FILE *in;
int i;
q=&b[0];
clrscr();
reg.x.ax=0x00;
reg.x.bx=FP_OFF(q);
segreg.ds=FP_SEG(q);
reg.x.cx=1;
reg.x.dx=0;
int86x(0x25,®,®,&segreg);
if(reg.x.cflag)
{
printf("ERROR READ");
printf("%x",reg.x.flags);
}
printf("\nnomer - %d",b[36]);
printf("\n)? - %c",b[38]);
printf("\n%c%c%c%c%c%c%c%c%c%c%c",b[42],b[43],b[44],b[45],b[46],b[47],b[48],b[49],b[50],b[51],b[52]);
if ((in = fopen("f11.com", "rt"))== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return 1;
}
i=62;
while (!feof(in))
{
b[i]=fgetc(in);
i++;
}
reg.x.ax=0x00;
reg.x.bx=FP_OFF(q);
segreg.ds=FP_SEG(q);
reg.x.cx=1;
reg.x.dx=0;
int86x(0x26,®,®,&segreg);
if(reg.x.cflag)
{
printf("ERROR WRITE");
printf("%x",reg.x.flags);
}
else
{
printf("OK");
}
getchar();
return 0;
}