Смекни!
smekni.com

Мова програмування Assembler (стр. 19 из 21)

MOV AH,01 ;Встановити розмір курсору

MOV CH,00 ;Верхня лінія сканування

MOV CL,13 ;Нижня лінія сканування

INT 10H ;Викликати BIOS

В результаті виконання цих команд курсор перетвориться в суцільний мигітливий прямокутник. Можна встановити будь-який розмір курсору між верхньою і нижньою границями, наприклад, 04/08, 03/10 і т.д. Курсор зберігає свій вигляд, поки програма не змінить його. Використання розмірів 12/13 (для моно) і 6/7 (для кольору) переводить курсор у його нормальний вигляд.

AH=02: Установка позиції курсору. Ця функція встановлює курcор у будь-яку позицію на екрані відповідно до координатами cтрічки і стовпця. Номер сторінки звичайно дорівнює 0, але може мати значення від 0 до 3 при 80 стовпцях на екрані. Для установки позиції курсору необхідно занести в регістр AH значення 02, у регістр BH номер сторінки і в регістр DX координати рядка і стовпця:

MOV AH,02 ;Встановити положення курсору

MOV BH,00 ;Сторінка 0

MOV DH,рядок ;Рядок

MOV DL,стовпець ;Стовпець

INT 10H ;Викликати BIOS

AH=03: Читання поточного положення курсору. Програма може визначити положення курсору на екрані (рядок і стовпець), а також pозмір курсору, у такий спосіб:

MOV AH,03 ;Визначити положення курсору

MOV BH,00 ;Встановити сторінку 0

INT 10H ;Викликати BIOS


Після повернення регістр DH буде містити номер рядка, а регістр DL-номер стовпця. У регістрі CH буде верхня лінія cканування, а в регістрі CL -нижня.

AH=04: Читання положення світлового пера. Дана функція використовується в графічному режимі для визначення положення світлового пеpа.

AH=05: Вибір активної сторінки. Нова сторінка встановлюється для кольорових текстових режимів від 0 до 3. Для режиму 40 х 25 можливо встановлювати до 8 сторінок (від 0 до 7), а для режиму 80 х 25 - до 4 сторінок (від 0 до 3).

MOV AH,05 ;Встановити активну сторінку

MOV AL,сторінка ;Номер сторінки

INT 10H ;Викликати BIOS

AH=06: Прокручування екрана нагору. Коли програма намагається видати текст на рядок нижче останнього на екрані, то відбувається перехід на верхній рядок. Навіть якщо за допомогою переривання буде створенний нульовий стовбець, все одно припускається новий рядок, і нижні рядки на екрані будуть зіпсовані. Для вирішення цієї проблеми використовується прокручування екрану.

Раніше код 06 використовувався для очищення екрану. В текстовому режимі установка в регістрі AL значення 00 призводить до повного прокручування нагору всього екрану, очищаючи його пробілами. Установка ненульового значення в регістрі AL визначає кількість рядків прокручування екрану нагору. Верхні рядки ідуть з екрану, а чисті рядки вводяться знизу. Наступні команди виконують прокручування всього екрану на один рядок:

MOV AX,0601H ;Прокрутити на один рядок нагору

MOV BH,07 ;Атрибут: нормальний, чорно-білий

MOV CX,0000 ;Координати від 00,00

MOV DX,184FH ;до 24,79 (повний екран)

INT 10H ;Викликати BIOS

Для прокручування будь-якої кількості рядків необхідно встановити відповідне значення в регістрі AL. Регістр BH містить атрибут для нормального чи інвертованого відображення, миготіння, установки кольору і т.д. Значення в регістрах CX і DX дозволяють прокручувати будь-яку частину екрану. Нижче наведений стандартний підхід до прокручування:

1. Визначити в елементі ROW (рядок) значення 0 для установки рядка положення курсору.

2. Видати текст і просунути курсор на наступний рядок.

3. Перевірити, чи знаходиться курсор на останньому рядку (CMP ROW,22).

4. Якщо так, то збільшити елемент ROW (INC ROW) і вийти.

5. Якщо ні, то прокрутити екран на один рядок і, використовуючи ROW перемістити курсор.

AH=07: Прокручування екрану вниз. Для текстового режиму прокручування екрану вниз позначає видалення нижніх рядків і вставка чистих рядків зверху. Регістр AH повинен містити 07, значення інших регістpів аналогічні функції 06 для прокручування нагору.

AH=08: Читання атрибуту/символу в поточній позиції курсору. Для читання символу і байта атрибута з дисплейного буфера, як у текстовому, так і в графічному режимі використовуються наступні команди:

MOV AH,08 ;Запит на читання атр./симв.

MOV BH,00 ;Сторінка 0 (для текстового реж.)

INT 10H ;Викликати BIOS

Дана функція повертає в регістрі AL значення символу, а у AH - його атрибут. У графічному режимі функція повертає тичина. 00 для не ASCII-кодів. Оскільки ця функція читає тільки один cимвол, то для символьного рядка необхідна організація циклу.

AH=09: Виведення атрибута/символу в поточну позицію курсору. Для висновку на екран символів у текстовому чи графічному режимі з установкою миготіння, інвертування і т.д. можна скористатися наступними командами:

MOV AH,09 ;Функція висновку

MOV AL,символ ;Виведений символ

MOV BH,сторінка ;Номер сторінки (текст.реж.)

MOV BL,атрибут ; чиАтрибут колір

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

У регістр AL повинний бути поміщений виведений на екран символ. Значення в регістрі CX визначає число повторень символу на екрані. Виведення на екран послідовності різних символів вимагає організації циклу. Дана функція не переміщує курсор. У наступному прикладі на екран виводиться п'ять мигітливих "серденьок" в інвертованому вигляді:

MOV AH,09 ;Функція висновку

MOV AL,03H ;Хробаки (карткова масть)

MOV BH,00 ;Сторінка 0 (текст. режим)

MOV BL,0F0H ;Миготіння, інверсія

MOV CX,05 ;П'ять разів

INT 10H ;Викликати BIOS

В текстовому (але не в графічному) режимі символи автоматично виводяться на екран і переходять з одного рядка на інший. Для висновку на екран тексту чи запиту повідомлення необхідно скласти програму, що встановлює в регістрі CX значення 01 і в циклі завантажує в регістр AL з пам'яті виведені символи тексту. Оскільки регістр CX у даному випадку зайнятий, то не можна використовувати команду LOOP. Крім того, при висновку кожного символу необхідно додатково просувати курсор у наступний стовбець (функція 02).

В графічному режимі регістр BL використовується для визначення кольору графіки. Якщо біт 7 дорівнює 0, то заданий колір замінює поточний колір крапки, якщо біт 7 дорівнює 1, то відбувається комбінація кольорів за допомогою команди XOR.

AH=0A: Виведення символу в поточну позицію курсору. Єдина різниця між функціями 0A і 09 полягає в тому, що функція 0A не встановлює атрибут:

MOV AH,0AH ;Функція виведення

MOV AL,символ ;Виведений символ

MOV BH,сторінка ;Номер сторінки (для тексту)

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

Для більшості застосувань команда переривання DOS INT 21H більш зручна.

AH=0E: Виведення у режимі телетайпа. Дана функція дозволяє використовувати монітор, як простий термінал. Для виконання цієї функції необхідно встановити в регістрі AH тичину значення 0E, у pегістр AL помістити виведений символ, колір тексту (у графічному режимі) занести в регістр BL і номер сторінки для текстового режиму - у регістр BH. Звуковий сигнал (код 07H), повернення на одну позицію (08H), кінець рядка (0AH) і повернення каретки (0DH) діють, як команди для форматування екрану. Дана функція автоматично просуває курсор, переводить символи на наступну cтрічку, виконують прокручування екрану і зберігає поточні атрибути екрану.

AH=0F: Одержання поточного відео режиму. Дана функція повертає в регістрі AL поточний відео режим (див.функцію AH=00), в pегістрі AH - число символів в рядку (20, 40 чи 80), у регістрі BH - номер сторінки.

AH=13: Встановлення символьного рядка (тільки для AT). Дана функція дозволяє на комп'ютерах типу AT виводити на екран символьні рядки з установкою атрибутів і переміщенням курсору:

MOV AH,13H ;Функція висновку на екран

MOV AL,сервіс ;0, 1, 2 чи 3

MOV BH,сторінка ;

LEA BP,адреса ;Адреса рядка в ES:BP

MOV CX,довжина ;Довжина рядка

MOV DX,екран ;Координати на екрані

INT 10H ;Викликати BIOS

Можливий наступний додатковий сервіс:

0 - використовувати атрибут і не переміщати курсор;

1 - використовувати атрибут і перемістити курсор;

2 - вивести символ, потім атрибут і не переміщати курсор;

3 - вивести символ, потім атрибут і перемістити курсор.

2. Функції екранного режиму. Функції малювання крапки та прямої

ГРАФІЧНИЙ РЕЖИМ

Для генерації кольорових зображень у графічному режимі використовують- ся мінімальні крапки растра - пікселі (pixel). Кольоровий графічний адаптер (CGA) має три ступені дозволу:

1. Низький дозвіл (не підтримується в ROM) забезпечує встановлення 100 рядків по 160 крапок (тобто чотири біти на крапку). Кожна крапка може мати один з 16 стандартних квітів, як описано в попередньому розділі "Кольору". Реалізація даного режиму включає пряму адресацію контролера Motorola 6845 CRT. Для цього використовуються два порти: тичина.3D4 і 3D5.

2. Середній дозвіл для стандартної кольорової графіки забезпечує 200 рядків по 320 крапок. Кожен байт у цьому випадку представляє чотири крапки (тобто два біти на крапку).

3. Високий дозвіл забезпечує 200 рядків по 640 крапок. Оскільки в даному випадку потрібно 16ДО байт пам'яті, високий дозвіл досягається тільки в чорно-білому (BW) режимі. Кожен байт тут представляє 8 крапок (т.е. один біт на крапку). Нульове значення біта дає чорний колір крапки, одиничне - білий.

Помітимо, що в графічному режимі ROM містить крапкові вигляди тільки для перших 128 ASCII-кодів. Команда INT 1FH забезпечує доступ до 1ДО байтової області в пам'яті, визначальної інші 128 символів. (8 байт на символ). Відображення графічних байтів у відео сигнали аналогічно, як для середнього, так і для високого pазрешения.

РЕЖИМ СЕРЕДНЬОГО ДОЗВОЛУ

При середньому дозволі кожен байт представляє чотири крапки, пронумерованих від 0 до 3:

Байт: :C1 C0:C1 C0:C1 C0:C1 C0:

Піксели: 0 1 2 3

У будь-який момент для кожної крапки можливі чотири кольори, від 0 до 3. Обмеження в 4 кольори підрозумівається тим, що двобітова крапка має 4 комбінації значень бітів: 00, 01, 10 і 11. Можна вибpати значення 00 для кожного з 16 можливих квітів чи фону вибрати значення 01, 10, і 11 для однієї з двох палітр. Кожна палітpа має три кольори:

C1 C0 Палітра 0 Палітра 1

0 0 фон фон

0 1 зелений голубий