Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная_работа_1-4(8086).doc
Скачиваний:
61
Добавлен:
21.03.2015
Размер:
217.09 Кб
Скачать

Вывод на экран

Вывод информации в ассемблерных программах осуществляется обычно при помощи сервисных функций DOS (прерывание 21h) или BIOS (прерывание 10h). Процесс вывода состоит в следующем:

  • определенные регистры микропроцессора загружаются выводимой информацией или адресом буфера, содержащего выводимую информацию;

  • в регистр AH заносится номер используемой для операции вывода функции;

  • инициируется прерывание.

Ниже представлен перечень функций прерывания 21h и 10h, использующихся для вывода информации.

Прерывание 21h.

Функция 02h

Вывод на дисплей.

Вход. AH=02h

DL=выводимый символ

Выход. Нет

Описание. Посылает символ из DL на стандартный вывод. Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево на одну позицию и оставляя его в новой позиции.

Функция 05h

Вывод на принтер.

Вход. AH=05h

DL= символ, записываемый на стандартный принтер

Выход. Нет

Описание. Посылает символ в DL на стандартное устройство принтера, обычно LPT1. Команда DOS MODE может перенаправить этот вывод в последовательный порт.

Функция 09h

Выдать строку.

Вход. AH=09h

DS:DX=адрес строки, заканчивающейся символом '$'.

Выход. Нет

Описание. Строка, исключая завершающий ее символ '$', посылается на стандартный вывод. Символы Backspace обрабатываются как в функции 02h. Обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). Строки, содержащие '$', можно выдать через 40h (BX=0), которая посылает символ в DL на стандартное устройство принтера, обычно LPT1.

Прерывание 10h.

Функция 02h

Вход. AH=02h

BH = видео страница

DH,DL = строка, колонка (считая от 0)

Выход. Нет

Описание. Устанавливает курсор в позицию DH,DL. Установка курсора на строку 25 делает курсор невидимым.

Функция 09h

Писать символ/атрибут в текущей позиции курсора.

Вход. AH=09h

BH = номер видео страницы

AL = записываемый символ

CX = счетчик (сколько экземпляров символа записать)

BL = видео атрибут (текст) или цвет (графика)

Выход. Нет

Описание. Выводит на экран в текущую позицию курсора символ с заданным атрибутом.

Функция 0ah

Писать символ в текущей позиции курсора.

Вход. AH=0ah

BH = номер видео страницы

AL = записываемый символ

CX = счетчик (сколько экземпляров символа записать)

Выход. Нет

Описание. Выводит на экран в текущую позицию курсора заданный символ.

Функция 13h

Вывод строки.

Вход. AH=13h

ES:BP – выводимая строка

CX = длина строки (подсчитываются только символы)

DH,DL = позиция (строка, колонка) начала вывода

BH = номер страницы

AL = код подфункции:

0=атрибут в BL; курсор без изменения

1=атрибут в BL; курсор – в конец строки

2=формат строки: char,attr,...; курсор без изменения

3=формат строки: char,attr,...; курсор – в конец строки

Выход. Нет

Описание. Выдает строку в позиции курсора. Символы 0dH (CarRet), 0aH (LineFeed), 08H (backspace) и 07H (Beep) трактуются как команды управления и не высвечиваются.

Некоторые функции прерывания 10h используют для вывода атрибут символа. Для адаптеров цветной графики в текстовом режиме атрибут определен следующим образом:

7

6

5

4

3

2

1

0

fgB

background

brt

foreground

foreground – цвет переднего плана (от 0 до 0fH);

brt – интенсивность: 1=передний план яркий;

background – фоновый цвет (от 0 до 7);

fgB – мерцание: 1=передний план мерцает;

Видеоадаптер поддерживает следующие цвета:

00H черный

01H синий

02H зеленый

03H голубой

04H красный

05H розовый

06H коричневый

07H серый

08H темно-серый

09H ярко-синий

0aH светло-зеленый

0bH светло-голубой

0cH светло-красный

0dH светло-розовый

0eH желтый

0fH белый

Вычислить значение атрибута можно, используя следующее выражение:

(фон * 16) + передний план + (128 для мерцания)

Приведенный ниже фрагмент программы иллюстрирует процесс вывода строки на экран.

MOV AH,09H ;Выбор функции прерывания

MOV DX,OFFSET STR ;Занесение в DX адреса выводимой строки

INT 21H

. . .

STR DB 10,13,'Hello$'

;Описание строки