Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отримання інформації про систему за допомогою ф...docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
26.84 Кб
Скачать

Читання символу і його атрибута з відеопам'яті (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, то вікно очиститься й заповниться рядками з кольорами, заданим у ВН. Структура байта атрибута аналогічна описаної вище.