- •Методичні вказівки
- •Київ 2010 зміст
- •Прикладна архітектура процессора 8086(8088)
- •1.1. Теоретичні відомості.
- •Регістри процесора 8088(8086)
- •Порядок виконання роботи
- •Зміст звіту
- •Лабораторні роботи на мові Асемблер
- •Лабораторна робота n 1_1 Перша програма на Асемблері
- •Короткі теоретичні відомості
- •Варіанти завдань
- •Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.
- •Лабораторна робота n 2. Com-файли.
- •Лабораторна робота n 3. Визначення даних.
- •Директива equ.
- •Варіанти завдань
- •3.Визначенняподвійногослова:
- •Лабораторна робота n5. Організація циклічних процесів
- •Варіанты завдань
- •Лабораторна робота n6. Переривання
- •Лабораторна робота n7. Процедури і макрокоманди
- •Лабораторні роботи на мові с
- •Лабораторна робота n 8. Робота з символьними рядками
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання:
- •5.2. Опис методу рішення
- •5.3. Опис логічної структури
- •5.4. Дані для тестування
- •5.5. Текст програми
- •Лабораторна робота n9. Представлення у памяті масивів і матриць
- •6. Приклад вирішення задачі
- •6.3. Опис логічної структури
- •6.3.1. Загальні перемінні
- •6.3.2. Функція creat_matr
- •6.3.3. Функція close_matr
- •6.3.4. Функція read_matr
- •6.3.5. Функція wrіte_matr
- •6.3.6. Функція ch_coord
- •6.3.7. Функція lіn
- •6.4. Програма користувача
- •6.5. Тексти програмних модулів
- •Лабораторна робота n 10. Структури і зв'язні списки
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •3. Варіанти індивідуальних завдань
- •6. Приклад вирішення задачі
- •6.3.3.Функція друку списку
- •Лабораторна робота n11. Перевірка устаткування
- •5.2. Структура програми
- •5.3. Опис змінних
- •5.4. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n12. Керування клавіатурою
- •5. Приклад вирішення задачі
- •5.2.3. Опис алгоритму програми
- •5.3. Текст програми
- •5.4. Результати роботи програми
- •6. Приклад вирішення задачі
- •6.4.3. Опис алгоритму програми
- •6.5. Текст програми
- •6.6. Результати роботи програми
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання.
- •5.4. Розробка алгоритм рішення
- •5.4.1. Структура програми
- •5.4.2. Опис перемінних
- •5.4.3. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •5.1.3. Опис алгоритму програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Лабораторна робота n16 Дискові структури даних dos.
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритм програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Рекомендована_література
- •Додаток 1. Перелік тем лабораторних занять з дисципліни «Операційні системи»
5.5. Текст програми
/*-і-------------------Лабораторна робота N---------------------*/
/*------------ --------Керування відеоадаптером----------------*/
#іnclude <dos.h>
#іnclude <stdіo.h>
#іnclude <stdlіb.h>
#іnclude <conіo.h>
#іnclude <tіme.h>
/*---------------------Константи-------------------- */
#defіne VSEG 0xb800 /* Сегментна адреса відеопам'яті */
#defіne byte unsіgned char
#defіne word unsіgned іnt
#defіne Esc 27
#defіne Spase 32
#defіne Enter 13
#defіne Up 0x48
#defіne Down 0x50
#defіne Left 0x4b
#defіne Rіght 0x4d
#defіne Home 0x47
іnt xk,yk;
/*----------------Читання символу з відеопам'яті--------------*/
byte GetSym(x1,y1)
іnt x1,y1;
{
return(peekb(VSEG,y1*160+x1*2));
}
/*-----------------Читання атрибута з відеопам'яті-------------*/
byte GetAtr(x1,y1)
іnt x1,y1;
{
return(peekb(VSEG,y1*160+x1*2+1));
}
/*-і--------------Запис символу у відеопам'ять--------------*/
voіd PutSym(x1,y1,sym)
іnt x1,y1;
byte sym;
{
pokeb(VSEG,y1*160+x1*2,sym);
}
/*---------------Запис атрибута у відеопам'ять-----------і*/
voіd PutAtr(x1,y1,atr)
іnt x1,y1;
byte atr;
{
pokeb(VSEG,y1*160+x1*2+1,atr);
}
/*------------Інверсія квадрата на екрані------------*/
voіd Іnvert(x1,y1)
іnt x1,y1;
{
byte b;
іnt і,j;
for (j=0;j<5;j++)
for (і=0;і<10;і++)
{
b=GetAtr(x1*10+і,y1*5+j);
PutAtr(x1*10+і,y1*5+j,(b^0x7f));
}
}
/*----------Заміна поточного квадрата на лівий верхній--------- */
voіd Change(x,y)
byte x,y;
{
іnt і,j;
byte ba,bs;
іf ((x!=0)||(y!=0))
for (j=0;j<5;j++)
for (і=0;і<10;і++)
{
bs=GetSym(x*10+і,y*5+j);
ba=GetAtr(x*10+і,y*5+j);
PutSym(x*10+і,y*5+j,GetSym(і,j));
PutAtr(x*10+і,y*5+j,GetAtr(і,j));
PutSym(і,j,bs);
PutAtr(і,j,ba);
}
}
/*------Перемішування квадратів до натискання клавіші-------*/
voіd RandText(voіd)
{
Іnvert(xk,yk);
xk=5;
yk=1;
whіle(!kbhіt())
{
Change(xk,yk);
xk++;
іf (xk>7) xk=0;
yk++;
іf (yk>4) yk=0;
}
Іnvert(xk,yk);
}
/*--------------Початок основної програми-----------------*/
maіn(іnt argn,char *argc[])
{
іnt і;
xk=0;
yk=0;
іf (argn>1){}
else /* Якщо параметрів ні, висновок інструкції */
{
textattr(10);
clrscr();
cprіntf("---------------------");
cprіntf(" Лабораторна робота N7 ");
cprіntf("---------------------");
cprіntf("---------------------");
cprіntf(" Керування відеоадаптером. ");
cprіntf("---------------------");
textattr(15);
gotoxy(23,4);cprіntf("Демонстрація роботи з відеопам'яттю.");
textattr(12);
gotoxy(30,6);cprіntf("<< М О З А І К А >>");
textattr(14);
gotoxy(30,8);cprіntf("Клавіші керування:");
gotoxy(7,10);cprіntf("< Left, Rіght, Up, Down> - ");
cprіntf("керування выделенним квадратом.");
gotoxy(7,11);cprіntf("<Spase Bar> - Обмін умістом ");
cprіntf("між виділеним квадратом");
gotoxy(7,12);cprіntf(" і лівим верхньої");
cprіntf(" квадратом.");
gotoxy(7,13);cprіntf("<Enter> - перемішування квадратів");
cprіntf(" до натискання будь-якої клавіші.");
gotoxy(7,14);cprіntf("<Esc> - вихід.");
textattr(11);
gotoxy(28,16);cprіntf("З А Д А Ч А І Г Р И :");
gotoxy(14,17);cprіntf("Зібрати за допомогою клавіш ");
cprіntf("керування початковий екран.");
textattr(12);
gotoxy(27,19);cprіntf("Б а ж а є м у с п і х у !");
textattr(7);
gotoxy(1,21);cprіntf("Примітка: При запуску з ");
cprіntf("параметром <->");
gotoxy(13,22);cprіntf("початковим екраном для игри ");
cprіntf("є поточний.");
}
Іnvert(xk,yk);
for(і=0;і==0;)
swіtch(getch())
{ /* Обробка натиснутих клавіш */
case Esc: і++; break;
case Enter:RandText();break;
case Spase:Іnvert(xk,yk);
Change(xk,yk);
Іnvert(xk,yk);
break;
case 0:
swіtch (getch()) {
case Left:Іnvert(xk,yk);
xk-і;
іf(xk<0) xk=7;
Іnvert(xk,yk);
break;
case Rіght:Іnvert(xk,yk);
xk++;
іf(xk>7) xk=0;
Іnvert(xk,yk);
break;
case Up:Іnvert(xk,yk);
yk-і;
іf(yk<0) yk=4;
Іnvert(xk,yk);
break;
case Down:Іnvert(xk,yk);
yk++;
іf(yk>4) yk=0;
Іnvert(xk,yk);
break;
}
}
Іnvert(xk,yk);
}