Мова програмування Assembler
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
ядок нижче останнього на екрані, то відбувається перехід на верхній рядок. Навіть якщо за допомогою переривання буде створенний нульовий стовбець, все одно припускається новий рядок, і нижні рядки на екрані будуть зіпсовані. Для вирішення цієї проблеми використовується прокручування екрану.
Раніше код 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 виводити на