Выделение мерцанием и яркостью
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!