Зчитування дати — функція 4

Лабораторна робота №.7

Тема.Робота з системою переривань.

Мета. Засвоїти поняття про підсистему переривань.

Вивчити типи та класи переривань.

Навчитись використовувати переривання.

 

Теоретичні відомості.

 

Розглянемо ряд переривань .

Прапорці обладнання

Повертає в регістр АХ наступні біти прапорців:

біт 1 — наявність математичного співпроцесора;

біти 4–5 — початковий відеорежим;

біти 6-7 — кількість флопі-дисководів;

біт 8 — 1, якщо встановлено контролер DMA;

біти 9-11 — кількість послідовних портів;

біти 14-15 — кількість паралельних портів.

Обсяг оперативної пам'яті

Повертає:

АХ = кількість 1-кілобайтних блоків основної пам'яті.

Дискові служби

Перелік функцій (номер функції при виклику переривання повинен утримуватися в регістрі АН):

0 — скидання дискової системи;

1 — визначення стану диска;

2 — читання секторів диска;

3 — запис секторів диска;

5 — форматування доріжки;

8 — визначення поточних параметрів диска;

10 — перевірка готовності диска;

При завданні вхідних параметрів звичайно використовується наступна схема: АН = номер функції;

AL = кількість секторів (1-128);

СН - кількість циліндрів (0-1023);

CL = номер сектора (1-17);

DH = номер голівки (0-15);

DL= номер дисководу (0 = А:, 1= 2-й флопі; $80 =жорсткий диск 0, $81 = жорсткий диск 1).

Повертає:

CF = 0 у випадку успіху, = 1 у випадку помилки.

Читання секторів диска — функція 2

Вхідні параметри: АН = 02;

AL = кількість секторів, що зчитуються, (1-128);

СН = номер доріжки/циліндра (0-1023);

CL = номер сектора (1-17);

DH = номер голівки (0-15);

DL =номер дисководу (0 = А:, 1= 2-й флопі; $80 у жорсткий диск 0, $81 = жорсткий диск 1).

Запис секторів диска — функція 3

Вхідні параметри:

АН - 03.

Призначення інших регістрів те ж, що і при читанні.

Клавіатура

Перелік функцій (номер функції при виклику переривання повинен утримуватися в регістрі АН):

0 — чекання рядка символів і її зчитування;

1 — визначення статусу рядка символів;

2 — одержання статусу клавіші переключення регістрів Shift;

3 — встановлення частоти опитування клавіатури;

5 — запис у буфер клавіатури.

Служби принтера

Перелік функцій (номер функції при виклику переривання повинен міститися в регістрі АН):

0 — друк символу;

1 — ініціалізація принтерного порту;

2 — зчитування стану принтерного порту.

Прапори стану принтера (регістр АН):

біт 0 — тайм-аут;

біт 1 — помилка введення/виведення;

біт 3 — обраний принтер включений;

біт 4 — немає паперу;

біт 6 — принтер не зайнятий.

Друк символу — функція 0

Вхідні параметри: АН = 00;

AL = символ, що друкується;

DX = використовуваний принтер (0-2).

Повертає:

АН =стан принтера.

Ініціалізація принтерного порту — функція 1

Вхідні параметри:

АН = 01;

DX = ініціалізований принтерний порт (0-2).

Повертає:

АН = стан принтера.

А — годинник

Перелік функцій (номер функції при виклику переривання повинен утримуватися в регістрі АН):

0 — зчитування лічильника системних годинників;

1 — встановлення лічильника системних годинників;

2 — зчитування показань системних годинників (AT, PS/2);

3 — встановлення показань системних годинників (AT, PS/2);

4 — зчитування дати (AT, PS/2);

5 — встановлення дати (AT, PS/2).

Зчитування лічильника системних годинників — функція 0

Вхідні параметри: АН = 00.

Повертає:

AL = прапор переходу через північ, встановлений у 1, якщо такий мав місце; СХ = старше слово лічильника;

DX = молодше слово лічильника.

Значення лічильника збільшується з періодом 55 мс. Опівночі CX:DX дорівнює нулеві.

Зчитування показань системних годинників — функція 2

Вхідні параметри: АН = 02.

Повертає:

CF = 0 — успішне зчитування, = 1 — помилка;

СН = годинник;

CL = хвилини;

DH = секунди;

DL = 1, якщо встановлено перехід на літній час.

Зчитування дати — функція 4

Вхідні параметри: АН = 04.

Повертає:

СН = століття (XIX або XX);

CL = рік;

DH = місяць;

DL = день;

CF = 0 — успішне зчитування, = 1 — помилка.

 

У мові Paskal для роботи із системою переривань найчастіще використовується процедура intr (x,y) де замість параметра х вказується конкретний вектор перериваня, параметр у це як правило зміна типу запис із списком усіх програмно доступних регістрів. Ця зміна повина бути описана в розділі var наступним чином:

var R:Registers;

але для забезпеченя такого оголошення в розділі uses повинен бути підключений модуль Dos.

Розглянемо наступну задачу.

Використовуючи підсистему переривань написати модуль роботи із маніпулятором типу “миша”.

Unit MyMouse;

 

Interface

Var

msActive:Boolean;

msX,msY:Integer;

msButtons:Byte;

 

Procedure msShow;

Procedure msHide;

Procedure msReset;

Procedure msGoto(X,Y:integer);

Procedure msSetRatio(x,y:byte);

Function msPressed:Boolean;

Function msMoved;

 

Implementation

uses Dos;

Var Rg:Registers;

 

Procedure msReset;//перевірка та ініціалізація миші

var B:Boolean;

begin

Rg.ax=00

Intr($33,rg);

msActive=(rg.bx=2)or(rg.bx=3);

msSetRatio(8,16)

msGoto(80,25);

msX:=1;

msY:=1;

msButtons:=0;

end;

 

Procedure msSetRatio(x,y:byte);

begin

if msActive then

begin

rg.ax:=$F;

Rg.cx:=X;

Rg.DX:=Y;

Intr($33,rg);

end;

end;

 

Procedure msShow;//Введення курсору

begin

if msActive then

begin

Rg.AX:=01;

Intr($33,rg);

end;

end;

 

Procedure msHide;//Сховати курсор

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

end;

end;

 

Function msPressed:Boolean;//перевірка натисненя кнопки миші

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

msButtons:=Rg.BX;

msX:=(Rg.Cx*79)div 632+1;

msY:=(Rg.DX*24)div 192 +1;

end

else msButtons:=0;

msPressed:=(msButtons=1)or(msButtons=2)or(msButtons=3);

end;

 

Function msMoved;//Перевірка на зсув миші

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

msButtons:=Rg.BX;

msX:=(Rg.Cx*79)div 632+1;

msY:=(Rg.DX*24)div 192 +1;

end

else

begin

X:=msX;

Y:=msY;

end;

msMoved:=(X<>msX)or(Y<>msY);

msX:=X;

msY:=Y;

end;

 

Procedure msGoto(x,y:integer);//перевід курсору

begin

if msActive then

begin

rg.ax:=4;

Rg.cx:=X;

Rg.DX:=Y;

Intr($33,rg);

end;

end;

 

begin

end.

 

Завдання для виконання.

1.Використовуючи підсистему переривань написати програму яка виводь на екран кількість флопі-дисководів.

2. Використовуючи підсистему переривань написати програму яка виводь на екран кількість послідовних портів.

3. Написати програму: яка за допомогою переривання миші буде здійснювати ініціалізацію миші та здійснювати її пересування по екрану (в консольному режимі).

4. Написати програму: яка за допомогою переривання миші буде виводити мишу на екран а потім ховати.

5. Використовуючи підсистему переривань написати програму яка виводь на екран кількість паралельних портів.

6. Використовуючи підсистему переривань написати програму яка виводь на екран об’єм оперативної пам’яті..

7. Використовуючи підсистему переривань написати програму яка виводь на екран інформацію про параметри НЖМД.

8. Використовуючи підсистему переривань написати програму яка записуватиме певну інформації у вказаний сектор флопі-диска. Сектор обирається користувачем.

9. Використовуючи підсистему переривань написати програму яка записуватиме певну інформації у вказаний сектор жорсткого диску. Сектор обирається користувачем.

10. Використовуючи підсистему переривань написати програму яка читатиме інформації із вказаному сектор флопі-диска. Сектор обирається користувачем.

11. Використовуючи підсистему переривань написати програму яка перевіряє чи зайнятий притер чи ні.

12. Використовуючи підсистему переривань написати програму яка виводь на екран поточний час (години, хвилини, секунди).

13. Використовуючи підсистему переривань написати програму яка виводь на екран поточну дату (рік, місяць, день)..

14. Використовуючи підсистему переривань написати програму яка буде перевіряти чи встановлено перехід на літній час, і вразі невсановленя такої функції встановлюватиме.

15. Використовуючи підсистему переривань написати програму яка визначатиме включений принтер чи ні

16. Використовуючи підсистему переривань написати програму яка визначатиме чи є в принтерів папір чи ні.

17. Використовуючи підсистему переривань написати програму яка визначатиме чи встановлено контролер DMA чи ні.

18. Використовуючи підсистему переривань написати програму яка посилатиме на друк через обраний притер першу літеру прізвища.

Мова програмування для всіх варіантиів завдань ДОВІЛЬНА.

Вимоги до звіту.

Звіт оформлюється на листку формата А4 із рамкою. У звіті повині бути відображені номер роботи, тема та мета.

Розділ "хід роботи" повинен містити текст завдання, код програми та результати виконання.

Розділ "відповідь на теоретичне питання" повинен містити відповідь на теоретичне питання згідно варіанту.

Звіт повинен містити висновок.

 

Контрольні питання.

1.Поняття "переривання" та "перериваючої прорами".

2. Поняття "вектору пееривання" та "перериваючого пристрою".

3. Поняття обробника переривать та "програми що переривається"

4. Характеристики переривань.

5. Класи переривань.