Хелпикс

Главная

Контакты

Случайная статья





Пример программы. . ОБЩИЕ ПОЛОЖЕНИЯ



6. Пример программы. 

Title GRAFIC

datasg       segment                         para

MAS    db       0,1,5,8,9,8,5,1,0,-1,-5,-8,-9,-5,-1

FUNC  dw -450, -350, 0, 250, 375, 400, 420, 360,

             dw  325, 300, 285, 200, 0 –200, -275

datasg     ends

 

stacksg   segment    para stack   'stack'

db       128 dup (?)

stacksg   ends

 

 

codesg    segment     para           'code'

 

ASSUME   SS: stacksg, CS: codesg, DS: datasg

 

start: MOV AX, DATASG

       MOV DS, AX

; ЗАДАНИЕ РЕЖИМА ЭКРАНА С ОЧИСТКОЙ

       MOV AH, 00H

       MOV AL, 03H      ; цветной, 25 Х 80

       INT 10H

; ИЗОБРАЖЕНИЕ ВЕРТИКАЛЬНОЙ ОСИ

       MOV BH, 00H

       MOV DL, 5 ;координаты верхней точки Х=5,

       MOV DH, 1 ;                                         Y =1.

met1: MOV AH, 02H

       INT 10H    ; установка курсора

       MOV CX, 1

       MOV AL, 7CH; символ вертикальной черточки

       MOV BL, 07H; яркобелый по черному

       MOV AH, 09H

       INT 10H    ; вывод символа

       INC DH     ;переход к координате Y+1

       CMP DH, 24 ;сравнение с нижней позицией

       JB met1      ; цикл вывода символа

; ИЗОБРАЖЕНИЕ ГОРИЗОНТАЛЬНОЙ ОСИ

       MOV BH, 00H

       MOV DL, 5 ; координаты левой позиции Х=5,

       MOV DH, 12 ;                                          Y=12.

       MOV AH, 02H

       INT 10H    ; установка курсора

       MOV CX, 50 ; длина цепочки символов

       MOV AL,5FH       ; символ горизонтальной черточки

       MOV BL, 07H; яркобелый по черному

       MOV AH, 09H

       INT 10H    ; вывод символа

; ВЫВОД ТОЧЕК ГРАФИКА

       LEA SI, MAS ; адрес массива значений

       MOV DI, 15 ; счетчик циклов

       MOV CX, 1 ; вывод по одному символу

       MOV BH, 00H

       MOV DL, 5 ; координаты первой точки X=5,

cikl: MOV DH, 12 ;                                         Y=12.

       SUB DH, [SI] ; вычисление Y(i)

       MOV AH, 02H

       INT 10H    ; установка курсора

       MOV AL, 2AH; символ (*)

       MOV BL, 0CH; яркокрасный по черному

       MOV AH, 09H

       INT 10H    ; вывод символа

       ADD DL,3 ; следующая координата по Х

       INC SI                   ; адрес следующего значения

       DEC DI     ;изменение счетчика циклов

       JNZ cikl     ; цикл вывода

;ЗАВЕРШЕНИЕ ПРОГРАММЫ

       MOV AX, 4C00H     

       INT 21H        

CODESG ENDS

       END start

 

7. ОБЩИЕ ПОЛОЖЕНИЯ  

       Экран монитора можно представить себе в виде двумерного пространства с адресуемыми позициями, в любой из которых может быть воспроизведен некоторый символ. Количество позиций, возможные цвета фона и символов задаются режимом экрана. Набор воспроизводимых символов определяется используемой системой кодировки символов.

       Задача создания графических изображений средствами Ассемблера включает в себя следующие процедуры:

- очистка экрана с заданием цвета фона и воспроизводимых символов;

- установка курсора в нужную позицию;

- вывод символа;

- вывод горизонтальной цепочки любых символов (в том числе и текстовой строки).

Для реализации указанных процедур программы на языке Ассемблера используют команды системных прерываний. Множество функций, связанных с операциями ввода-вывода, реализует команда системного прерывания INT 10H, передающая управление в BIOS (базовая система ввода-вывода), а также INT 21H, передающая управление в DOS. Код требуемой функции загружается в регистр АН.

В начале программы следует задать режим экрана. Для этого используется INT 10H с АН=00Н, а в AL помещается код режима. Так, код AL=03Н обеспечивает текстовый цветной режим с набором из 16 цветов и разрешающей способностью 25Х80 (25 строк по 80 элементов в каждой строке). Этот режим рекомендуется использовать при выполнении данной лабораторной работы. Другие режимы см. в [2].     ПРИМЕР 1. Задание режима экрана.

MOV AH, 00H

MOV AL, 03H

INT 10H     

Данная функция вместе с заданием режима обеспечивает очистку экрана с установкой по умолчанию черного фона и белых символов.

Для задания иного цвета фона и изображаемых символов используется байт-атрибут.

 

BL R G B I R G B

  Ф   О   Н     С И М В О Л       

 

Отдельные биты кодируют следующие признаки:

Бит 7 (BL) при установке в 1 обеспечивает эффект мигания символа.

Бит 3 (I) при установке в 1 обеспечивает повышенную яркость символа.

Биты 6,5,4 и 2,1,0 определяют цвет фона и символов соответственно. При этом R – красный, G – зеленый, B – синий цвет. Значения 1 обеспечивают наличие соответствующего цвета, 0 - его отсутствие. Можно заметить, что комбинация 000 соответствует черному, а 111 – белому цвету.

R+G дает желтый цвет, R+B – пурпурный (сиреневый), G+B – голубой.

Примеры байтов – атрибутов:

00000000 (0H) –черный по черному - неотображаемый символ (для пароля),

00000111 (07Н) – белый по черному нормальной яркости,

10001111 (8FН) –ярко белый по черному с миганием;

01110000 (70Н) – черный по белому;

00101110 (2ЕН) – яркожелтые символы на зеленом фоне;

10001100 (8СН)-мигающие яркокрасные символы на черном фоне.

       Очистка с заданием цвета фона и символов всего экрана или части строк экрана производится так называемой прокруткой вверх или вниз, которая реализуется с помощью

 INT 10H с АН=06Н (вверх) или АН=07Н (вниз), что для задания цвета равнозначно.

ПРИМЕР 2.  Очистка экрана прокруткой вверх.  

       MOV AH, 06H; функция прокрутки вверх.

       MOV AL, 00H; очистка всего экрана.

       MOV BH, 07H; атрибут пробела-ЧБ нормальной яркости.

       MOV CX, 0000H; верхняя левая позиция.

       MOV DX, 184FH; нижняя правая позиция (Y=24, X=79).

       INT 10H

Для задания цвета фона и символов только на нескольких последовательных строках необходимо в AL загрузить количество строк, в СХ – координаты начала первой строки из этой группы , а в DX – координаты конца последней строки.

       Процедура установки курсора в нужную позицию реализуется командой INT 10H с АН=02Н. В регистр BH заносится номер экранной страницы ( обычно 00Н), а в регистр DX – кординаты курсора: в DH – номер строки, в DL – номер столбца (элемента по строке).

ПРИМЕР 3. Установка курсора в заданную позицию. 

       MOV AH, 02H     ; функция перемещения курсора.

       MOV BH, 00H     ; страница 0.

       MOV DH, 05H     ; строка 5.

       MOV DL, 0CH    ; столбец 12.

       INT 10H

       Вывод отдельного символа реализуется INT 10H с АН=09Н. В регистр AL заносится код символа, в BL- байт-атрибут символа , обычно такой же, какой был определен при очистке этого участка экрана (если он не был по умолчанию черно-белым). Если задать другой атрибут, то он будет определять цвет фона и символов только в пределах прямоугольничка - знакоместа символа.

ПРИМЕР 4. Вывод символа на экран. 

       MOV AH, 09H                 ; функция вывода символа.

       MOV AL, 2AH                ; символ ‘ *’.

       MOV BH, 00H                 ; страница 0.

       MOV BL, 0FH                 ;белый по черному, яркий.

       MOV CX, 01H                 ;один символ.

       INT 10H

Последовательность одинаковых символов в одной строке (горизонтальную цепочку) можно получить, если в Примере 4 задать содержимое СХ отличным от единицы. Для получения вертикальной цепочки одинаковых символов (например, вертикальная сторона рамки) следует организовать цикл, включающий процедуры установки курсора и вывода одиночного символа с меняющейся координатой Y в каждом цикле. Поскольку регистр СХ содержит количество выводимых символов, для организации циклов нельзя использовать команду LOOP , которая по умолчанию обращается к СХ как к счетчику циклов. Для проверки условия окончания циклов необходимо использовать какие-либо другие признаки. Пример реализации этого положения можно найти в примере программы вывода графика (раздел 6).

       Системное прерывание INT 21H с AH=09H позволяет вывести на экран сразу целую символьную строку (например, текст), заданную как переменная в сегменте данных. В регистр DX загружается смещение этой переменной.

ПРИМЕР 5. Вывод символьной строки

Пусть в сегменте данных имеется переменная:

CITY     db  ‘SAMARA’, 0DH, 0AH, ‘$’

Следует отметить, что символ $ обязателен и является ограничителем области вывода, а коды 0DH и 0AH обеспечивают перевод строки и возврат каретки печатающего устройства, если следующее сообщение должно начинаться с новой строки.

 Вывод слова SAMARA на экран реализуется следующим фрагментом программы:

       LEA DX, CITY

       MOV AH, 09H

       INT 21H

Цвет фона и выводимой надписи соответствует атрибуту, установленному при очистке этого участка экрана.

       Прерывание INT 16H c AH=00H обеспечивает ожидание ввода символа с клавиатуры без его отображения на экране и может быть полезно для организации некоторой паузы между фрагментами программы. Никаких других параметров не требуется.

ПРИМЕР 6. Формирование паузы

       MOV AH, 00H

       INT 16H

Если после какого-то фрагмента программы нужна пауза, следует вывести текст «Нажмите любую клавишу», затем вставить две строки программы ожидания. Тогда после нажатия клавиши программа будет продолжена.

 

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.