Выделение мерцанием и яркостью



AH = 10h. Подфункция 03h этой функции, в отличии от описанных выше функций вывода символов на экран, воздействует сразу на весь экран, влияя на отображение тех символов, у которых установлен старший бит атрибута фона. Функция позволяет либо приписать этот бит яркости фона, давая тем самым возможность выводить на экран 16 цветов фона, либо назначить его атрибуту мерцания символа. В последнем случае цвет фона может принимать только 8 значений.

MOV AH,10h ; Функция

MOV AL,03h ; Подфункция мерцание-яркость

MOV BL,0   ; 0 - яркость, 1 - мерцание

INT 10h    ; Вызов BIOS

Вывод символьной строки

AH = 13h. Данная функция позволяет выводить на экран символьные строки с установкой атрибутов и перемещением курсора:

MOV AH,13h     ; Функция вывода

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

MOV BH,страница ;

LEA BP,адрес   ; Адрес строки в ES:BP

MOV CX,длина   ; Длина строки

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

INT 10h        ; Вызов BIOS

Значения в регистре AL указывают:

0 - использовать атрибут и не перемещать курсор

1 - использовать атрибут и переместить курсор

2 - вывести символ, затем атрибут и не перемещать курсор

3 - вывести символ, затем атрибут и переместить курсор

Вывод символьной строки средствами DOS

Вывод текста на экран средствами DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 (вызов функции DOS) и указания команды DOS INT 21Н. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:

NAMSTUD DB ’Имя студента’,’$’

    .

    .

MOV АН,09      ;3апрос вывода на экран

LEA DX,NAMSTUD ;3агрузка адреса сообщения

INT 21H        ;Вызов DOS

Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки 'Имя покупателя?$' или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$", Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретится в памяти.

Команда LEA загружает адрес области NAMSTUD в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMSTUD, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).

Вывод символов таблицы ASCII

Большая часть из 256 символов ASCII имеют символьное представление и могут быть выведены на экран. Некоторые значения, например, 00H и FFH, не соответствуют никаким выводимым символам и представляются на экране как пробел, хотя пробел имеет в ASCII особый код – 20Н. Ниже приведена программа, которая выводит на экран все символы ASCII-таблицы.

 

TITLE      A08DISAS (СОМ) Вывод набора символов ASCII         

                 .MODEL SMALL  

                 .CODE                

                 ORG 100H         

BEGIN:     JMP SHORT  A10MAIN

ASCHAR   DB 00, '$'

;                            Главная    процедура:                     

.286

A10MAIN PROC NEAR

                 CALL B10SCREEN  ;Очистка экрана                   

                 CALL C10CURSOR ;Установка курсора

                 CALL D10DISPLY ;Вывод символов                   

                 MOV AX,4C00H ;Завершение работы                

                 INT 21H          

A10MAIN ENDP

; Очистка экрана и установка атрибутов:                 

BIOSCREEN PROC NEAR       

                 PUSH A                               ;Сохранение значений регистров

                 MOV AX,0600H ;Прокрутка целого экрана

                 MOV BH,07              ;Атрибуты: белый шрифт на черном фоне

                 MOV CX,0000      ;Верхний левый угол

                 MOV DX,184FH ;Нижний правый угол

                 INT 10Н                 ;Вызов обработчика прерывания

                 POP A                     ;Восстановление значений регистров

                 RET                          ;Возврат к точке вызова

BIOSCREEN ENDP                  

; Установка курсора в ячейку 08,00:

C10CURSOR PROC NEAR

                 PUSHA                     ;Сохранение значений регистров

                 MOV АН,02Н          ;Запрос на установку курсора

                 MOV ВН,00              ;Страница 0

                 MOV DX,0800H ;Строка 8, столбец 0

                 INT 10Н                 ;Вызов обработчика прерывания

                 POPA                        ;Восстановление значений регистров

                 RET                          ;Возврат к точке вызова

C10CURSOR ENDP                 

; Вывод                      символов ASCII 00Н - FFH, кроме символов от 08Н до 0DH:

D10DISPLY PROC                  

                 PUSHA                     ;Сохранение значений регистров

                 MOV СХ,256             ;Подготовить 256 повторений

                 LEA DX,ASCHAR ;Указать адрес ASCHAR

D20:         CMP ASCHAR,08Н ;Код символа меньше 08Н?

                 JB D30                          ;Да, вывести

                 CMP ASCHAR, 0DH ;Код символа меньше или равен 0DH?

                 JBE D40                 ;Да, пропустить

D30:         MOV АН,09Н          ;Вывод ASCII-символа

                 INT 21Н           

D40:         INC ASCHAR          ;Перейти к следующему символу

                 LOOP D20               ;Уменьшить значение в СХ,

                                                      ;повторить, если не ноль

                 POPA                        ;Восстановление значений регистров

                 RET                          ;Возврат к точке вызова

D10DISPLY ENDP                  

                 END  BEGIN

Порядок выполнения работы

3.1. С помощью отладчика DEBUG создать и выполнить ассемблерную программу, которая устанавливает сиреневый фон всего экрана и задает в центре экрана красное окно меньшего размера.

3.2. Доработайте программу по пункту 3.1, чтобы вывести в центр окна свою фамилию и инициалы.

3.3. Оттранслируйте, скомпонуйте и выполните программу по пункту 3.2.

3.4. Оттранслировать программу, приведенную в разделе 2.2.13, скомпоновать ее и преобразовать в файл типа .СОМ для выполнения.

Требования к отчету

Отчет по лабораторной работе должен содержать:

а) титульный лист;

б) условие задания;

в) текст программ на языке Ассемблера;

г) ответы на контрольные вопросы.

Контрольные вопросы

1. Сколько цветов можно обеспечить для фона и для текста на стандартном цветном графическом адаптере (CGA) в текстовом режиме?

2. Напишите байты-атрибуты в двоичном формате для: а) ярко-голубого на сиреневом; б) желтого на коричневом; в) серого на красном с миганием.

3. Напишите команды для вывода пяти символов карточной масти "бубны" в текстовом режиме ярко-зеленым цветом на сиреневом фоне.

4. Определите данные и напишите команды, необходимые для вывода на экран функцией 9Н прерывания INT 21H сообщения “What is the current date (mm/dd/yy)?. После вывода на экран сообщения должен подаваться звуковой сигнал.


ЛАБОРАТОРНАЯ РАБОТА № 3


Дата добавления: 2018-04-04; просмотров: 798; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!