
- •Функції bios для роботи із клавіатурою
- •Формат конфігураційної rom-таблиці:
- •Перевірка наявності символу (01h, 11h, 21h int 16h)
- •Одержання стану прапорів клавіатури (02h, 12h, 22h int 16h)
- •Підтримка розширених клавіатур здійснюється функціями 12h і 22h bios.
- •Запис символу в буфер клавіатури (05h int 16h)
- •Читання символу і його атрибута з відеопам'яті (08h int 10h)
- •Переміщення у вікні нагору (06h int 10h)
Читання символу і його атрибута з відеопам'яті (08h int 10h)
У пам'яті відеоадаптера кожний символ представлений двома байтами, що містять ASCII-код символу і його байт-атрибут. Функція 08h BIOS дозволяє прочитати код символу і його атрибут безпосередньо з відеопам'яті.
Вхід: АН = 08h — читання символу і його атрибута в поточній позиції курсору; ВН = номер відеосторінки. Вихід: AL = ASCII-код символу; АН = байт-атрибут. Нижче наведена програма, що встановлює курсор у задану позицію.
Програма, що встановлює курсор у задану позицію.
.code main:
хor bh,bh
mov dh,10
mov dl,10
mov ah,02h
int 10h; установили позицію курсору (10.10) записуємо символ і атрибут у відеопам'ять
mov al. "a"
mov bl,10001100b ; атрибут - яскраво-червоний миготливий
mov cx,5 ;повторити 5 разів
mov ah,09h
int 10h:прочитаємо символ з поточної позиції відеопам'яті:
mov ah,08h
int 10h: з'ясуємо поточну позицію курсору
хог bh,bh
Важливо відзначити, що поточна позиція курсору після виконання функцій 08h і 09h залишилася незмінною. Звідси треба важливий вивід про те, що при використанні цих функцій необхідно також піклуватися й про рух курсору функцією 02h. BIOS надає функцію 0Eh, що виводить символ у режимі телетайпа, що припускає автоматичне коректування поточної позиції курсору після виводу символу.
Запис символу у відеопам'ять (0Ah int 10h)
Функція 0Ah призначена для запису ASCII-коду символу з поточним значенням атрибута в даній позиції безпосередньо у відеопам'ять, причому зробити це можна з кількістю повторень, заданих у регістрі СХ. Аналогічно функції 09h поточна позиція курсору не змінюється.
Вхід: АН = 0Ah — запис символу в поточну позицію курсору; ВН = номер відеосторінки; AL = ASCII-код символу; СХ = число повторень.
Запис символу в режимі телетайпа (0Eh int 10h)
Функція 0Eh виводить символ у поточну позицію курсору з автоматичним її зсувом (на відміну від функцій 09h і 0Ah).
Вхід: АН = 0Eh — запис символу в поточну позицію курсору; ВН = номер відеосторінки; AL ¦¦ ASCII-код символу; СХ = число повторень. Запис символу в останню позицію рядка автоматично переводить курcop у першу позицію наступного рядка.
Вивід рядка (13h int 10h)
Ця функція з'явилася в BIOS комп'ютерів архітектури AT.
Вхід: АН = 13h вивід рядка (AT); AL = режим запису: біт 0 - після виводу курсор у кінець рядка; біт 1 - кожний символ у рядку представлений двома байтами: байтом з ASCII-кодом і байтом-атрибутом; біт 2..7 - резерв; ВН = номер відеосторінки; BL = байт атрибут, якщо рядок містить тільки символи (AL. 1=0); СХ = число символів у рядку; DH, DL = рядок і стовпець початку виводу рядка; ES: ВР - адреса в пам'яті початку рядка.
Зверніть увагу, що вміст рядка для виводу може бути двох типів: з байтом-атрибутом, що супроводжує кожний символ рядка, і без байта-атрибута. В останньому випадку рядок складається з одних кодів символів з єдиним значенням байта-атрибута, що вказують у регістрі BL. Як видно, багато функцій BIOS працюють безпосередньо з відеопам'яттю.
Переміщення у вікні нагору (06h int 10h)
Функція 06h дозволяє визначити на екрані вікно, у якому можливо прокрутити певну кількість рядків нагору. При такім прокручуванні верхні рядки зникають і знизу додаються порожні рядки.
Вхід: АН = 06h — переміщення рядків у вікні нагору; AL = число рядків для заповнення знизу; ВН = атрибут символів (кольори) у рядку для заповнення; СН і CL = рядок і стовпець верхнього лівого кута вікна; DH і DL = рядок і стовпець нижнього правого кута вікна.
Рядки для заповнення знизу мають кольори, певний у ВН. Якщо вказати AL=0, то вікно очиститься й заповниться рядками з кольорами, заданим байтом-атрибутом у ВН.Нижче наведена програма виводу декількох рядків на екран, після чого вона визначає вікно на екрані й прокручує його на кілька рядків нагору.
:prg05_05.asm - програма для роботи з вікном на екрані.
.data
String db "dfsh3453637869uioraepBBan"
Ien_str1ng »$-string
adr_stringdd string
. code
..........
movcx,25 ml: mov al,1:після виводу - курсор у кінець рядка
xorbh.bh:номер відеосторінки
movbl.7: атрибут push ex
mov cx,len_string:довжина виведеного рядка
les bp.adr_string:адреса рядка в парі ES:BP
mov ah,l3h
int l0h
incdh ;рядок початку виводу
incdl: стовпець початку виводу pop ex
loop ml ¦.визначаємо й прокручиваем вікно нагору
mov al.4:4 рядка
mov bh. 0
mov ch, 5
mov cl.5.
mov dh. 10
mov dl.30
mov ah.06h
int 10h
Помітьте, що функція 06h досить гнучко працює з курсором.Переміщення у вікні вниз (07hint10h) Функція 07h дозволяє визначити на екрані вікно, у якому можливо прокрутити певну кількість рядків униз. При такому прокручуванні нижні рядки зникають і зверху додаються порожні рядки.
Вхід: АН = 07h — переміщення рядків у вікні вниз; AL = число рядків для заповнення зверху; ВН = атрибут символів (кольори) у рядку для заповнення; СН і CL - рядок і стовпець верхнього лівого кута вікна; DH і DL = рядок і стовпець нижнього правого кута вікна.
Рядки для заповнення зверху мають кольори, певний у ВН. Якщо вказати А1_=0, то вікно очиститься й заповниться рядками з кольорами, заданим у ВН. Структура байта атрибута аналогічна описаної вище.