
- •Контрольна робота №1 з курсу "Системне програмування"
- •Завдання:
- •Рішення
- •Недоліки
- •Лабараторна робота №1
- •Короткі теоретичні відомості
- •Лабораторне завдання
- •Текст програми Hello.Asm
- •Лабораторна робота №2
- •Короткі теоретичні відомості Стандартні способи вводу-виводу dos
- •Ввід з клавіатури символьної інформації.
- •Функції dos виводу даних на екран.
- •Лабораторне завдання
- •Текст програми
- •Лабараторна робота №3
- •Короткі теоретичні відомості
- •Характеристика атрибута символа у відеобуфері.
- •Коди кольорів стандартної палітри. Таблиця 1
- •Довідкові дані по функціях bios
- •Лабораторне завдання
- •Текст програми
Коди кольорів стандартної палітри. Таблиця 1
Код |
Колір |
Код |
Колір |
0 |
Чорний |
8 |
Сірий |
1 |
Синій |
9 |
Блакитний |
2 |
Зелений |
А |
Салатовий |
3 |
Бірюзовий |
В |
Ясно- бірюзовий |
4 |
Червоний |
С |
Рожевий |
5 |
Фіолетовий |
D |
Ясно- фіолетовий |
6 |
Коричневий |
Е |
Жовтий |
7 |
Білий |
F |
Яскраво- білий |
Розглянемо деякі приклади. Так, в режимі мерехтіння, значення старшого півбайта атрибута 8h означає не сірий фон, а чорний при мерехтливому символі, колір якого як і раніше визначається молодшим півбайтом; значення старшого півбайта 0Ch- червоний фон при мерехтливому символі.
Перемикання призначення біта 7 здійснюється підфункцією 03h функції 10h переривання int 10h.
Довідкові дані по функціях bios
Переривання int 10h
00h |
02h |
03h |
05h |
06h(07h) |
08h |
09h |
0Ah |
0Eh |
10h |
13h |
00h(10h) |
01h(11h) |
-
Функція 00h.Установка відеорежиму поточної відеосторінки.
Виклик:AH=00h
Al=відеорежим: 03h- текстовий, 80х25, 16 кольорів, встановлюється в DOS по замовчуванню;
10h |
графічний (EGA), 640х350, 16 кольорів; |
12h |
графічний (VGA), 640x480, 16 кольорів; |
13h |
графічний (VGA), 320x200, 256 кольорів; |
Існує ще багато інших відеорежимів, але їх номери для виклику через цю функцію різні для різних відеоадаптерів.
-
Функція 02h.Установка позиції курсора.
Задає положення курсора на екрані в текстових координатах, з яких надалі буде виводитися текст. Відлік номера стрічки і стовпця ведеться від верхнього лівого кута. Курсор можна встановити як в текстовому, так і в графічному режимах, однак, в графічному режимі курсор не видно. BIOSпідтримує 8 незалежних курсорів – поодному на кожну сторінку незалежно від того, яка сторінка є активною.
Виклик:AH= 02h,
BH= номер сторінки (0,1,...7),
DH= стрічка,
DL= стовпець.
-
Функція 03h. Зчитування позиції і розміру курсора.
Повертає поточні координати стану курсора на вибраній сторінці. Це дає можливість тимчасово перейти для роботи на інше місце екрана, а потім повернутися на старе місце.
Виклик:AH= 03h,
BH= номер сторінки (0,1,...7),
Повернення:DH, DL= стрічка і стовпець поточної позиції курсора,
CH, CL= перша і остання стрічка розгортки курсора.
-
Функція 05h. Установка відеосторінки.
Встановлює активну відеосторінку (як текстову, так і графічну)
Виклик:AH= 05h,
AL= номер сторінки (0,..., 7).
-
Функція 06h(07h).Ініціалізація або прокрутка вікна вгору (вниз).
Ініціалізує вікно, з вказаними координатами, пробілами ASCII із заданим атрибутом (AL=0) або прокручує вміст вікна вгору (вниз) на задане число стрічок (AL= число стрічок). При прокрутці рядки, що з'являються знизу (зверху) заповнюються пробілами ASCII із заданим атрибутом. Функцію зручно використати для швидкого очищення екрана або деякого прямокутного вікна.
Виклик:AH= 06h(07h),
AL=0- очищення, AL= N(N>0)-прокрутка на N рядків,
BH= атрибут символів у вікні,
CH,CL= координати рядка і стовпця (Y, X) лівого верхнього кута,
DH, DL= координата рядка і стовпця (Y, X) правого нижнього кута,
-
Функція 08h.Читання символа і атрибута в поточній позиції курсора.
Виклик: AH= 08h,
BH= номер сторінки (0,..., 7),
Повернення:AH= атрибут символа,
AL= ASCII- код символа.
-
Функція 09h. Запис символа із заданим атрибутом на екран в позицію курсора.
Діє як в графічному, так і в текстовому режимах. У графічному режимі символи не повинні перейти на наступний рядок.Всі коди в AL розглядаються як символьні і не управляють положенням курсора.Після виведення символа, курсор зміщається до наступної позиції функцією02h. Коефіцієнт повторення дозволяє виводити рядки однакових символів. У текстовому режимі символ виводиться з вказаним в BL атрибутом. У графічному - вмістBL впливає тільки на колір символа, але не на фон під ним. Графічне зображення під знакомесцем
затирається.
Виклик:AH= 09h,
AL= ASCII- код символа,
BL= атрибут символа (текстовий режим) або тільки колір символа (графічний режим),
BH=номерсторінки (0,1,...7),
CX= коефіцієнт повторення.
-
Функція 0Ah.Запис символа з поточним атрибутом на екран в позицію курсора.
Функція діє як в графічному, так і в текстовому режимах. Символ приймає атрибут, встановлений раніше для цієї позиції. Всі ASCII- коди в AL розглядаються як знаки і не управляють положенням курсора (також як і в функції 09h).Після виведення символа, курсор зміщається до наступної позиціїфункцією 02h.
Виклик:AH= 0Ah,
AL= ASCII- код символа,
BH= номер сторінки (0,1,...7),
CX= коефіцієнт повторення.
-
Функція 0Eh.Запис символа з поточним атрибутом в режимі телетайпу.
Записує символ ASCII в позицію курсора (заздалегідь встановлену функцією 02h) на активній сторінці і зміщає курсор до наступної позиції. Коди ASCII: 07h- дзвінок (BEL), 08h- крок назад (BS), 0Dh- повернення каретки (CR), 0Ah- перевід стрічки (LF), розглядаються як керівні і виконуються відповідні ним дії. Інші керуючі коди розглядаються як знаки і виводяться на екран. Діє автоматичний перевід курсора на наступний рядок після завершення попереднього, а також прокрутка екрана вгору на 1 рядок після заповнення самого нижнього.
Виклик:AH= 0Eh,
BH= номер сторінки (0,1,...7),
AL= ASCII- код символа,
BL= колір символа (тільки для графічного режиму).
-
Функція 10h. Підфункція 03h. Перемикання біта "мерехтіння/яскравість".
Визначає призначення старшого біта 7 атрибута символа: мерехтіння символа або підвищена яскравість фону.
Виклик: AH= 1003h,
BL= призначення 7-го біта атрибута:
0-підвищена яскравість,
1- мерехтіння (встановлюється в DOS по замовчуванню).
-
Функція 13h.Запис стрічки символів із заданими атрибутами.
Записує стрічку в поточну сторінку відеобуфера, починаючи з вказаної позиції.
Коди ASCII: 07h- дзвінок, 08h- крок назад, 0Ah- перевід стрічки, 0Dh- повернення каретки, розглядаються як керівники, інші як символьні.
Виклик:AH= 13h,
AL= режим запису:
0- атрибут символа в BL, стрічка містить тільки коди символів, після запису курсор приймає початкове положення;
1- відрізняється від режиму 0 тим, що після запису курсор переміщається в кінець стрічки;
2- стрічка містить навперемінно коди символів і атрибутів (тобто кожний символ описується 2 байтами - ASCII-кодом і атрибутом), після запису курсор приймає початкове положення;
3- відрізняється від режиму 2 тим, що по закінченню виводу курсор переміщається в кінець стрічки.
BH= номер сторінки (0,1,...7),
BL= атрибут для режимів 0 і 1,
CX= довжина символьної стрічка (в довжину входять тільки коди символів, але не байти атрибутів),
DX= DH.DL= координати курсора (рядок, стовпець) в початковій точці виведення на екрані,
ES:BP= адреса початку стрічки в пам'яті. Звернути увага на особливості задання адреси!
Переривання int 16h.
-
Функція 00h(10h).Читання символа клавіатури з очікуванням.
Читає з кільцевого буфера вводу (місткість буфера 15 слів) символ і скан-код. Якщо буфер пустий, чекає вводу.
Кожній клавіші на клавіатурі відповідає так званий скан-код, відповідній тільки цій клавіші. Цей код посилається клавіатурою при кожному натисненні і відпущенні клавіші і обробляється в BIOS обробником переривання int 9. Функція 00h(10h) дає можливість отримати код натиснення, не перехоплюючи цей обробник. Якщо натисненій клавіші відповідає ASCII-символ, то:
AL- ASCII-код символа,
AH- скан-код клавіші.
Якщо натисненій клавіші відповідає розширений ASCII- код, то:
AL- 00h (або префікс0E0hдля сірих клавіш),
AH- розширенийASCII- код.
Виклик: AH= 00h(83/84-key), 10h(101/102-key),
Повернення:AL= ASCII- код символа, зображений на клавіші/00h(0E0h),
AH= скан-код/розширенийASCII- код клавіші.
Функція 00h(10h) є синхронною: при її виконанні програма зупиняється в очікуванні натисненої клавіші.
Отримати достовірну інформацію про скан-коди клавіш клавіатури можна шляхом виконання у відладчику Turbo Debugger простої програми Scancode.asm(див.Додаток 1 до роботи).
Функція 01h(11h).Перевірка буфера клавіатури на наявність в ньому символа.
Визначає, чи є в кільцевому буфері символи,що чекають вводу; повертає прапор очікування і сам символ при його наявності. Однак символ і його скан-код не витягуються з буфера і можуть бути знов отримані при повторному виклику цієї функції. Дана функція відноситься до числа асинхронних: визначивши стан буфера вводу, вона повертає управління програмі.
Виклик:AH= 01h(83/84-key), 11h(101/102-key).
Повернення: ZF=1, якщо буфер пустий,
ZF=0, якщо в буфері є символ, що чекає зчитування. У цьому випадку:
AL= ASCII-код символа/00h(0E0h),
AH= скан-кодклавіші/розширений ASCII- код.