Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_лаб_ПЗСУ.doc
Скачиваний:
11
Добавлен:
07.02.2016
Размер:
483.84 Кб
Скачать

2. Порядок виконання лабораторної роботи.

1. Ознайомитись з системними функціями для виводу інформації на екран.

2. Написати програму, що використовує системні функції для виводу на екран інформації за допомогою падаючих букв та рядка, що біжить.

3. Зберегти інформацію в створеному файлі.

4. Відповісти на контрольні питання.

5. Оформити звіт.

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

  1. Які переривання використовуються при роботі з терміналом?

  2. Особливості організації виводу інформації на екран.

  3. Яким образом встановлюється і змінюється колірна підтримка режиму виводу інформації?

  4. Проаналізувати доступні засоби BIOS для організації виводу на екран.

  5. Порівняти дію різних системних функцій виводу на екран.

  6. Яким чином можна позиціювати курсор на екрані?

  7. Які обмеження має дев’ята функція для виводу інформації на екран?

Лабораторна робота № 2

Використання системних функцій для контролю та визначення часу

в системах управління

Мета роботи: Вивчити системні функції для визначення дати і часу

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

Час − найважливіший ресурс для систем керування і його розподіл між виконуваними завданнями є однією з найбільш важливих задач при створенні програмного забезпечення систем керування. В даний час вимірити час як фізичну величину в системах, що використовують сучасну обчислювальну техніку, можна з високим ступенем точності.

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

Починаючи з IBM AT, персональні комп'ютери містять два пристрої для керування процесами - годинник реального часу (RTC) і власне системний таймер. Годинник реального часу одержує живлення від акумулятора на материнській платі і працює навіть тоді, коли комп'ютер виключений. Це пристрій можна застосовувати для визначення/установки поточні дати і часу, установки будильника з метою виконання яких-небудь дій і для виклику переривання IRQ8 (INT 4Ah) кожну мілісекунду. На жаль, годинник CMOS не дозволяє вимірювати короткі інтервали часу і не завжди коректно виробляє переривання.

Системний таймер використовується одночасно для керування контролером прямого доступу до пам'яті, для керування динаміком і як генератор імпульсів, що викликає переривання IRQ0 (INT 8h) 18,2 рази в секунду. На жаль, системний таймер у звичайному режимі роботи не вимірює інтервали коротше 1/18 секунди, а при його перепрограмуванні в інший режим збиваються системний годинник і перестають нормально функціонувати пристрої, що використовують інформацію від системного таймера (наприклад, накопичувачі гнучких дисків). Однак таймер дає багаті можливості для перепрограмування на рівні портів вводу-виводу, але на рівні DOS і BIOS годинник реального часу і системний таймер використовуються тільки як засіб визначення/установки поточного часу й організації затримок.

Мається декілька системних функцій для визначення/установки дати/часу. Нижче наведені приклади функцій призначених для управління і контролю часу. Вони використовують різний формат запису часу і дати. Наприклад, функції 2Ah, 2Bh, 2Ch і 2Dh переривання DOS зручні для виділення проміжків часу, а функції 02h, 03h, 04h і 05h переривання 1Ah зручні для виводу даних на екран.

Опис функції для визначення дати встановленої в системі в якості поточної:

Функція DOS 2Аh. Визначити дату.

Вхід: АН = 2Ah

Вихід: CX = рік (1980-2099);

DH = місяць;

DL = день;

AL = день тижня (0 – неділя, 1 – понеділок...).

Опис функції для визначення часу встановленого в системі в якості поточного:

Функції DOS 2Ch. Визначити час.

Вхід: AH = 2Ch.

Вихід: СН = година;

CL = хвилина;

DH = секунда;

DL = сота частки секунди.

Ця функція використовує системний таймер, тому час змінюється тільки 18,2 рази в секунду і число в DL збільшується відразу на 5 або 6.

Опис функції для встановлення дати в системі в якості поточної:

Функції DOS 2Bh. Установити дату.

Вхід: AH = 2Bh

CX = рік (1980 – 2099)

DH = місяць

DL = день

Вихід АН – 0FFh, якщо введено неіснуючу дату, і AL – 00, якщо дата встановлена.

Опис функції для встановлення часу в системі в якості поточного:

Функції DOS 2Dh. Установити час.

Вхід: AH = 2Dh

CH = година;

CL – хвилина;

DH = секунда;

DL = сота частка секунди.

Вихід: AL = 0FFh, якщо введено неіснуючий час, і AL – 00, якщо час установлений.

Функції 2Bh і 2Dh встановлюють одночасно як внутрішнім годинник DOS, що керуються системним таймером і обновляються 18,2 рази в секунду, так і годинник реального часу. BIOS дозволяє керувати годинником безпосередньо.

Опис функції для визначення дати у форматі BCD, яка встановлена в системі в якості поточної:

INT 1AH AH = 04h. Визначити дату RTC.

Вхід: AH = 04h

Вихід: CF = 0, якщо дата прочитана;

CX = рік (у форматі BCD, тобто 2001h для 2001-го року);

DH = місяць (у форматі BCD);

DL = день (у форматі BCD).

CF = 1, якщо годинник не працюють або спроба читання прийшлася на момент відновлення.

Опис функції для визначення часу форматі BCD, встановленого в системі в якості поточних:

INT 1Ah AH = 02h визначити час RTC

Вхід: AH = 02h.

Вихід CF = 0, якщо час прочитаний;

CH – година (у форматі BCD);

CL – хвилина (у форматі BCD);

DH – секунда (у форматі BCD);

DL = 01h, якщо діє літній час, 00h, якщо немає;

Прапор переносу CF = 1, якщо годинник не працює або спроба читання прийшлася на момент відновлення.

Опис функції для установки нового часу форматі BCD:

INT 1Ah, AH = 03h. Установити час RTC.

Вхід: AH=03h;

CH – година (у форматі BCD);

CL – хвилина (у форматі BCD);

DH – секунда (у форматі BCD);

DL = 01h, якщо діє літній час, 00h, якщо немає

Вихід: прапор переносу CF = 0, якщо час установлений.

Опис функції для установки нової дати форматі BCD:

INT 1AH, AH – 05h. Установити дату RTC.

Вхід: AH = 05h;

CX = рік (у форматі BCD, тобто 2001h для 2001-го року);

DH = місяць (у форматі BCD);

DL = день (у форматі BCD).

Вихід: Прапор переносу CF = 0, якщо дата встановлена;

CF = 1, якщо дату не удалося установити.

Тим часом, сучасні процесори типу Intel х86 містять у своєму складі набагато більш простий, точний і ефективний засіб виміру часу — лічильник тактів (Time Stamp Counter). Зазначений лічильник уведений до складу процесорів, починаючи з виробів класу Pentium, він присутній у всіх наступних модифікаціях процесорів Intel (і скопійованих з них виробах-клонах виробництва інших фірм). Лічильник тактів входить до складу блоку моніторингу продуктивності процесора разом з декількома іншими спеціалізованими лічильниками. Однак на даний момент із усіх регістрів блоку моніторингу тільки лічильник тактів можна використовувати без ризику виникнення несумісності з наступними моделями процесорів (структура лічильника проста і тому стабільна)

Лічильник тактів є 64-розрядним. Мінімальні і максимальний вимірювані інтервали часу залежать від внутрішньої тактової частоти процесора. Максимальний вимірюваний період часу обраний з дуже великим запасом — інтервал 264 тактів навіть при частоті 1 ГГц буде відповідати періодові приблизно в 585 років.

Мінімальний вимірюваний інтервал при внутрішній частоті 100 Мгц складає 10 нс, а при частоті 1 Ггц — 1 нс. Оскільки цей інтервал залежить від внутрішньої тактової частоти процесора, необхідно провести калібрування таймера, побудованого на базі лічильника тактів, по системним годинник або годинник CMOS. Системний годинник (також як і годинник CMOS) мають свій власний убудований кварцовий генератор, вони не залежать від частоти системної шини і внутрішньої частоти процесора, тобто видають правильні показання навіть у випадку розгону системи.

Доступ до лічильника тактів контролюється прапором TSD у керуючому регістрі CR4 процесори (якщо прапор скинутий, команда виконується при будь-якому рівні привілеїв виконуваної програми, а якщо встановлено — те тільки при рівні 0). В лічильник автоматично заноситься нуль в момент рестарту процесора, після чого починає підрахунок тактів, що пройшли з моменту рестарту. Прочитати вміст лічильника тактів можна, використовуючи команду RDTSC. Після її виконання в регістрі EDX буде розмішена старша частина, а в регістрі ЕАХ — молодша частина значення, що лічильник тактів містив у момент виконання команди. Таким чином, реалізація програмного таймера істотно спрощується - можна відразу виконати операцію ділення на 32-розрядний дільник (однак у цьому випадку значення дільника повинне бути досить велико, щоб не відбувалося переповнення, тобто частка не повинна містити більш 32 двійкових розрядів) .

Можна використовувати лічильник тактів для виміру реальної внутрішньої тактової частоти процесора. Спочатку виміряється тривалість (у тактах процесора) шістнадцяти тимчасових інтервалів між відрахуваннями системного таймера, після чого обчислюється середня тривалість інтервалу. Отримане усереднене значення збільшується на частоту тактового генератора системного таймера (1 193 180 Гц), а потім ділиться на коефіцієнт перерахування системного таймера (65 536). Результат потрібно розділити на константу 1 000 000, щоб одержати значення внутрішньої частоти процесора в мегагерцах. Приклад програми наведений у додатку В.