- •Учебно-методический комплекс дисциплины «Системное программирование»
- •Алматы, 2016
- •Опись содержания учебно-методического комплекса дисциплины
- •1. Цели и задачи дисциплины.
- •2. Содержание дисциплины
- •2.1.Лекционный курс
- •2.3. Лабораторные занятия
- •2.4. Самостоятельная работа студентов под руководством преподавателя
- •2.5. Самостоятельная работа студентов
- •3. Учебно-методические материалы по дисциплине
- •3.1.Список рекомендуемой литературы
- •3.2. Вопросы для подготовки к экзамену
- •1. Информация о дисциплине
- •2. Краткое описание дисциплины
- •4. Литература для изучения
- •5. Критерии оценки
- •Карта учебно-методической обеспеченности
- •Тезисы лекций
- •Лекция 2. Базовые конструкции структурного программирования
- •Лекция 3. Указатели и массивы
- •Лекция 4. Типы данных, определяемые пользователем
- •Лекция 5. Модульное программирование
- •Лекция 6. Объектно-ориентированное программирование
- •Лекция 7. Операционные системы и их интерфейсы
- •Лекция 8. Управление потоками и процессами
- •Лекция 9. Синхронизация потоков и процессов
- •Лекция 10. Обмен данными между параллельными процессами
- •Лекция 11. Структурная обработка исключений
- •Лекция 12. Работа с виртуальной памятью
- •Лекция 13. Динамически подключаемые библиотеки
- •Планы семинарских, практических, лабораторных и студийных занятий
- •4.1. Индивидуальное задание:
- •4.2. Описание метода решения
- •4.3. Описание логической структуры
- •4.4. Данные для тестирования
- •4.5. Текст программы
- •5.1. Описание методов решения
- •5.1.1. Представление в памяти
- •5.1.2. Модульная структура программного изделия
- •5.2. Описание логической структуры
- •5.2.1. Общие переменные
- •5.3. Программа пользователя
- •5.4. Тексты программных модулей
- •5.5. Варианты.
- •5. Варианты индивидуальных заданий
- •6. Пример решения задачи
- •6.1. Индивидуальное задание:
- •6.2. Описание методов решения
- •6.3. Описание логической структуры
- •6.4. Текст программы
- •5.1. Структура данных программы
- •5.2. Структура программы
- •5.3. Описание переменных
- •5.4. Описание алгоритма программы
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Индивидуальное задание.
- •5.2. Разработка алгоритма
- •5.3. Текст программы
- •5.4. Результаты работы программы
- •4. Порядок выполнения
- •5. Индивидуальные задания
- •6. Пример решения задачи
- •6.3. Индивидуальное задание.
- •6.4. Разработка алгоритма решения
- •6.4.1. Структура программы
- •6.5. Текст программы
- •6.6. Результаты работы программы
- •4. Порядок выполнения
- •5. Пример решения задачи
- •5.1. Индивидуальное задание.
- •5.4. Разработка алгоритм решения
- •5.5. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритм программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.6. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.3. Результаты работы программы
- •5.1. Разработка алгоритма решения
- •5.1.3. Описание алгоритма программы
- •5.2. Текст программы
- •5.1. Разработка алгоритма решения
- •5.1.1. Структура программы
- •5.1.2. Описание переменных
- •5.3. Результаты работы программы
- •5.1.3. Описание алгоритма программы
- •5.2 Текст программы
- •5.3. Результаты работы программы
- •Материалы для мониторинга и контроля образованности обучающихся (уровня сформированности предметных компетенций):
- •Методические разработки (рекомендации)
- •Официально изданные преподавателями учебные и учебно-методические пособия (при условии публикации)
- •Перечень:
- •Учебная литература и/или материалы на электронных носителях
5.2. Текст программы
/*----------------Лабораторная работа N11-----------------*/
/*--------------"Просмотр списка драйверов."--------------*/
#include <dos.h>
#include <conio.h>
/*-----------------------Константы----------------------- */
#define byte unsigned char
#define word unsigned int
#define ATR(x,z) if(drv->attr&x){cprintf(" %s\n\r",z);y++;}
#define DA(x,y) (struct DR_HEAD *)MK_FP(x,y);
#define VSEG 0xb800 /* Сегментный адрес видеопамяти */
#define byte unsigned char
#define word unsigned int
#define Enter 13
#define rx 50
#define ry 13
int xk,yk;
word cc;
byte bm[rx][ry][2];
8struct DR_HEAD { /* заголовок драйвера */
struct DR_HEAD *next;
word attr, strat_addr, intr_addr;
char name[8];
} *drv; /* адрес текущего драйвера */
struct DR_HEAD *clock, *con; /* Адреса CLOCK$ и CON */
union REGS rr;
struct SREGS sr;
int i, y, y1;
/*---------------------------------------------------*/
void clrbuf(void)
{
while(kbhit()) getch();
}
/*--------------Чтение символа из видеопамяти-------------*/
byte GetSym(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2));
}
/*-------------Чтение атрибута из видеопамяти-------------*/
byte GetAtr(x1,y1)
int x1,y1;
{
return(peekb(VSEG,y1*160+x1*2+1));
}
/*-------------Запись символа в видеопамять---------------*/
void PutSym(x1,y1,sym)
int x1,y1;
byte sym;
{
pokeb(VSEG,y1*160+x1*2,sym);
}
/*-------------Запись атрибута в видеопамять--------------*/
void PutAtr(x1,y1,atr)
8int x1,y1;
byte atr;
{
pokeb(VSEG,y1*160+x1*2+1,atr);
}
/*--------------------------------------------------------*/
void MemW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
bm[i][j][0]=GetSym(i,j);
bm[i][j][1]=GetAtr(i,j);
}
}
/*--------------------------------------------------------*/
void RmmW(x,y,xr,yr)
int x,y,xr,yr;
{
int i,j;
for (j=y;j<(y+yr);j++)
for (i=x;i<(x+xr);i++)
{
PutSym(i,j,bm[i][j][0]);
PutAtr(i,j,bm[i][j][1]);
}
}
/*--------------------------------------------------------*/
void ClrW(x1,y1,x2,y2,s,a)
int x1,y1,x2,y2;
byte s,a;
{
int i,j;
for (j=y1;j<y2;j++)
for (i=x1;i<x2;i++)
{
if (s!=0) PutSym(i,j,s);
PutAtr(i,j,a);
}
}
/*--------------------------------------------------------*/
void FlDrv(void)
{
int xm,ym;
xm=wherex();
ym=wherey();
MemW(0,1,rx,ry);
ClrW(1,2,rx,ry,0,7);
ClrW(0,1,rx-2,ry-2,32,16);
gotoxy(1,2);
textattr(15+16*3);
cprintf("*** Атрибуты драйвера %5u ***",cc);
gotoxy(1,3);
textattr(15+16);
if (drv==clock) cprintf(" активный CLOCK$");
if (drv==con) cprintf(" активный CON");
gotoxy(1,4);
textattr(14+16);
if (drv->attr&0x8000)
{
ATR(1,"консоль ввода")
ATR(2,"консоль вывода")
ATR(4,"нулевое устройство")
ATR(8,"CLOCK$ (часы)")
ATR(0x2000,"поддерживает OUB")
}
else
{
ATR(2,"32-байтный адрес сектора")
ATR(0x2000,"читает media FAT")
}
ATR(0x40,"поддерживает функции DOS 3.2")
ATR(0x800,"поддерживает Open/Close")
ATR(0x4000,"поддерживает IOCTL")
gotoxy(1,12);
textattr(15+16*3+128);
cprintf("*** Нажмите любую клавишу... ***");
if (getch()==0) getch();
RmmW(0,1,rx,ry);
gotoxy(xm,ym);
}
/*--------------------------------------------------------*/
main() {
int c;
/* получение адреса CVT */
rr.h.ah=0x52; intdosx(&rr,&rr,&sr);
/* адрес драйвера часов */
clock=DA(peek(sr.es,rr.x.bx+10),peek(sr.es,rr.x.bx+8));
/* адрес драйвера консоли */
con=DA(peek(sr.es,rr.x.bx+14),peek(sr.es,rr.x.bx+12));
/* адрес NUL-драйвера */
textattr(10);
clrscr();
cprintf("---------------");
cprintf(" Лабораторная работа N11 ");
cprintf("---------------");
cprintf("---------------");
cprintf(" Просмотр списка драйверов. ");
cprintf("---------------");
drv=DA(sr.es,rr.x.bx+34);
textattr(7);
gotoxy(8,3);
cprintf("Нажимайте <SpaceBar> ,а для рассмотрения атрибутов",
"драйвера <Enter>.");
textattr(12);
gotoxy(28,4);
cc=1;
cprintf("Список драйверов устройств :\n\r");
while(FP_OFF(drv)!=0xffff) {
textattr(15);
cprintf("%5u",cc);
textattr(14);
cprintf(" Адрес - %Fp ",drv);
textattr(11);
cprintf(" атрибуты - %04X ",drv->attr);
textattr(13);
if (drv->attr&0x8000)
for (i=0;i<8; cprintf("%c",drv->name[i++]));
else cprintf("блочный - %d",drv->name[0]);
cprintf("\n\r"); y=0;
while ((c=getch())==Enter)FlDrv();
if (c==0) getch();
drv=drv->next; /* адрес след.драйвера */
cc++;
}
textattr(12+128);
cprintf("Конец списка. Нажмите любую клавишу...\n");
getch();
textattr(7);
}
