Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

ll Points ddressible позволяет индивидуально управлять свечением каждого пиксела независимо от других

Работа добавлена на сайт samzan.net:


Лабораторная  работа  4

ОРГАНИЗАЦИЯ ВЫВОДА ИНФОРМАЦИИ НА ЭКРАН

С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ BIOS 

  1.  Цель работы

Изучение возможностей прерывания BIOS INT 10h для вывода информации на экран монитора.

  1.   Теоретические сведения

4.2.1 Графический режим (GrGraphics или APA  - All Points Addressible) позволяет  индивидуально управлять свечением каждого пиксела независимо от других. Пиксел (pixelPicture Elevent) – одна из точек, составляющих матрицу точек экрана при растровом методе вывода изображения. Отдельному пикселу соответствует ячейка специальной памяти – видеопамяти, которая сканируется синхронно с движением луча монитора.

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

Область видеопамяти, требуемая для отображения матрицы всего экрана, называется страницей. При многостраничной организации видеопамяти активна только одна – отображаемая на экран.

4.2.2 В текстовом режиме экран организуется в виде матрицы знакомест, образованной горизонтальными линиями и вертикальными колонками.

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

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

4.2.3 При включении ПК видеоконтроллер обычно устанавливает работу в текстовом 16-цветном режиме с разрешением 80х25 символов (код режима  3). Начальный адрес видеопамяти – В8000h, объем – 32 Кб.

Организация видеопамяти: на 1 символ приходится 2 байта, первый хранит ASCII-код, второй – цвет символа и цвет фона знакоместа (рисунок 4.1).

Столбец 0 Столбец 1 Столбец 79

Символ 0

Символ 1

Символ 79

Код

Цвет

Код

Цвет

Код

Цвет

Символ 80

Символ 81

Символ 159

Код

Цвет

Код

Цвет

Код

Цвет

Символ 1920

Символ 1921

Символ 1999

Код

Цвет

Код

Цвет

Код

Цвет

Строка 0

Строка 24

Рисунок 4.1 - Отображение видеопамяти на экран в текстовом  16-цветном режиме (80х25 символов) [ 8 ]

4.2.4 Формат байта атрибутов:

7

6

5

4

3

2

1

0

 

 Мерцание:  код цвета фона  код цвета символа

1 - мерцание есть 0…7 0…F

0 - обычный текст

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

Таблица 4.1 - Цветовые коды

Код

Цвет

Код

Цвет

0

Черный

8

Серый

1

Синий

9

Голубой

2

Зеленый

A

Салатный

3

Бирюзовый

B

Светло-бирюзовый

4

Красный

C

Розовый

5

Фиолетовый

D

Св.-фиолетовый

6

Коричневый

E

Желтый

7

Светло-серый

F

Белый

4.2.6 При программировании начальный адрес видеопамяти заносится в сегментный регистр ЕS.

4.2.7 На уровне BIOS символы выводятся с использованием функций прерывания INT 10h (таблица 4.2). При программировании с использованием этих функций необходимо помнить, что они сохраняют только регистры BX, CX, DX и сегментные. Сохранность остальных используемых регистров обеспечивается, например, помещением их значений в стек [ 7 ].

Таблица 4.2 - Видеосервис  BIOSINT 10h (некоторые функции)

Вход

Назначение

Примечание

AH=0

AL – режим дисплея

Установка  режима

Некоторые режимы дисплея [8]

Код

Тип

Разре-

шение

Размер символа

Число цв. / адрес видео буфера

1h

TXT цв

40х25

16 / B8000h

3h

TXT цв

80х25

16 / B8000h

4h

GR цв

320x200

8х8

4 / B8000h

10h

GR цв

640x350

8х14

16 / А0000h

12h

GR цв

640x480

8х16

16 / А0000h

13h

GR цв

320x200

8х8

256 / А0000h

Режимы 0-13h -  стандартные для адаптеров MDA, CGA, EGA, VGA.

Режимы 14h-17h отражают специфику нестандартных VGA- / SVGA –расширений BIOS

При установке режима происходит автоматическая очистка экрана.

ПРИМЕР  Установить стандартный текстовый режим

Mov ah, 0

Mov al, 3            ; режим текстовый стандартный

Int 10h


Продолжение таблицы 4.2

AH=1

CH/CL (биты 3…0) – номер верхней / нижней строки курсора в знакоместе

 

Установка вертикального размера  курсора в TXT

Строки нумеруются сверху от нуля.  

Курсор отображается только в режиме TXT.

Для цветного дисплея по умолчанию верхняя граница – 6, а нижняя – 7.

0

1

2

3

4

5

6

7

ПРИМЕР  Изменить форму курсора на прямоугольную

Mov AH, 1

Mov CH, 0       ; самый верх

Mov CL, 7        ; самый низ

Int 10h

AH=2

BH-номер текстовой видеостраницы

DH-номер строки, Y,

0–24 (29)

DL-номер столбца, Х,

0-79 (39)

Установка позиции курсора.

В GR устанавливается позиция невидимого курсора.

ПРИМЕР Установить курсор в 12-ый столбец 5-ой  строки

mov  ah, 2     

mov  bh, 0     ; видеостраница 0

mov  dh, 5     ; строка 5

mov  dl, 12     ; столбец 12

int  10h         

AH=3

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

Получить позицию и размер курсора.

ВЫХОД:

CH / CL – номер верхней / нижней строки курсора

DH / DL – номер строки / столбца

Обычно применяется, когда в зависимости от позиции курсора определяется пункт меню.

Продолжение таблицы 4.2

AH=5

AL – номер видеостраницы

Установить видеостраницу для отображения

AH=6

AL – количество прокручиваемых строк

BH – атрибут заполнителя пустых строк

CH / CL – номер строки / столбца верхнего левого угла окна

DH / DL – номер строки / столбца нижнего правого угла окна

Прокрутка окна вверх

Область экрана вне окна не изменяется.

Если AL=0,  окно прокручивается целиком.

Действует только  на активную  страницу дисплея.

ПРИМЕР     Выполнить очистку  всего  экрана (текстовый режим 3).

              mov ah, 6                   

              mov al, 0                     ; весь экран

              mov  bh,7                    ;7d=0000 0111b – нормальный атрибут (черно/белый)

              mov  cx,0                    ; координаты левого верхнего угла (0,0)

              mov  dx,184Fh            ; координаты правого нижнего угла (18h=24d,4Fh=79d)

              int  10h                      

AH=7

Аналогично функции 6

Прокрутка окна вниз

Аналогично функции 6

AH=8   

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

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

ВЫХОД:

AL - ASCII-код символа

AH – байт атрибутов


Продолжение таблицы 4.2

AH=9   

AL - ASCII-код выводимого символа

BH - номер страницы видеопамяти

BL - атрибут (TXT) или цвет (GR)

CX - число повторений символа

Вывод символа с заданным атрибутом в текущую позицию курсора (TXT и GR) 

Записывает один или несколько одинаковых символов, не перемещает курсор. Управляющие символы (возврат каретки,  перевод строки…) не действуют, а  выводятся, как обычные символы

ПРИМЕР  Вывести пять мигающих "сердечек" в инвертированном виде:

              mov  ah, 9          

              mov  al, 3h         ; код символа «сердечко»

              mov  bh, 0          ; видеостраница 0

              mov  bl, 0F0h     ; мигание, инверсия:  F0h=1111 0000b

              mov  cx, 5          ; повторить пять раз

              int  10h               

AH=0Ah   

AL, BН, CX – аналогично функции 9

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

Аналогично функции 9 

AH=0Сh

AL – код цвета точки

CX/DX – горизонтальная / вертикальная координата точки

BH - номер страницы видеопамяти

Запись точки

в GR

ПРИМЕР  Вывести  в заданную позицию экрана точку заданного цвета

mov  ah, 0Ch         

              mov  al, цвет             ; цвет точки

              mov  cx, столбец      ; горизонтальная координата

              mov  dx, строка        ; вертикальная координата

              int  10h                     

Продолжение таблицы 4.2

AH=0Еh   

AL - ASCII-код символа;

BH - номер страницы видеопамяти (TXT);

BL - цвет символа (для GR).

Вывод символа в режиме телетайпа

Cимвол отображается в текущей позиции курсора, затем курсор сдвигается на одну позицию вправо. При необходимости курсор автоматически перемещается на новую строку или выполняется прокрутка окна.

Функция использует для форматирования управляющие символы: звуковой сигнал (7h), BackSpace (8h), конец строки (0Ah), возврат каретки (0Dh).

В TXT сохраняет текущие  атрибуты экрана.

В GR можно задать цвет отображаемого символа.

AH = 0Fh

Определение текущего режима

ВЫХОД:

AH –число символов в строке

AL – номер текущего режима

BH – номер активной страницы

  1.  Пример 1

4.3.1 Формулировка задачи

Вывести символ #  в  позиции номер 2 строки номер 3 экрана желтым цветом по синему фону (использовать прямой вывод в видеопамять).

4.3.2 Постановка задачи

Для вывода символа с заданными атрибутами, используя прямую запись в видеопамять, необходимы следующие действия.

а)  Вычислить адрес ячейки видеопамяти, соответствующей указанному в задаче местоположению символа на экране. При этом следует помнить, что начальный адрес видеопамяти - 0B800h, при программировании эта величина заносится в сегментный регистр ES.

б)  Принимая во внимание принцип организации видеопамяти, когда на один символ приходится 2 байта, причем первый хранит ASCII-код, второй – цвет символа и цвет фона знакоместа, необходимо в первый байт ячейки занести код выводимого символа, во второй – его атрибуты.

Схема отображения видеопамяти на экран применительно к условиям задачи представлена на рисунке 4.2.

Для максимального упрощения программы не вводить блоки очистки экрана и остановки для обозрения результатов работы на отдельных этапах

.

ES:[ВХ] строка

0 159

№0

160 319

№1

320 479

 №2   480=160*3

№3

SI +0 +1 +2 +3 +4 +5

№0 №1 №2

Нужно поместить: #  атрибут

Рисунок 4.2 – Схема отображения видеопамяти на экран

4.3.3  Листинг программы

model small

.data

.stack 100h

.code

start:

mov ax, @data

mov ds, ax

; Загрузить в ES начальный адрес текстовой видеопамяти

 mov ax, 0B800h

mov es, ax

; определить адрес ячейки, соответствующей начальному символу

; в строке №3: умножить номер строки на 160 – количество байт

; видеопамяти, необходимое для описания одной строки экрана

    mov al, 160

    mov ah, 3

    mul ah  ; результат в ax

mov bx, ax  ; сохранить результат в bx

; определить смещение от начала строки до ячейки,

;соответствующей колонке №2

   mov si, 2   ; в   si  - номер колонки

shl si, 1 ; умножить на 2 (сдвигом влево на одну позицию),

; т.к. на каждый символ приходится 2 байта видеопамяти

; записать код символа в видеопамять

    mov byte ptr es:[bx][si],  '#'

; записать код цвета в следующий байт

    inc si

    mov  byte ptr es:[bx][si],  1Eh    ; 1Eh=0001 1110b

mov ax, 4C00h 1 14(E)

int 21h

end start

  1.  Пример 2

4.4.1 Формулировка задачи

Создать окно с координатами (20,5)х(50,15), фон – синий. В центре окна вывести слово УРА, буквы соответственно зеленого, белого и красного цвета (текстовый режим).

4.4.2 Постановка задачи

Установить стандартный текстовый режим номер 3. Произойдет автоматическая очистка экрана.

Для создания окна воспользоваться функцией 6 прерывания 10h, позволяющей выполнить прокрутку строк внутри заданной прямоугольной области на экране, установив для нее атрибуты, которые будут действовать по умолчанию, в частности, цвет фона – синий (код – 1), цвет символов – любой, например, светло-серый (код - 7).

Так как каждый символ, по условию, имеет собственный цвет, отличный от принятого по умолчанию, для вывода воспользоваться функцией 9 прерывания 10h. Указанная функция не перемещает курсор, поэтому для его установки применить функцию 2 прерывания 10h.

Создать два массива: один – содержит последовательность выводимых символов с символом-ограничителем на конце (использовать 0), другой – их атрибуты.

На рисунке 4.3 представлен эскиз создаваемого окна с указанием координат его углов и координат выводимого текста.

5

10                     УРА

15

20  35  50

Рисунок 4.3 – Эскиз окна для разработки программы

4.4.3 Листинг программы

model small

.stack 100h

.data

 mes db 'УРА', 0           ; 0 – признак конца вывода

 atr db 00010010b,  00011111b,  00010100b      ; массив атрибутов

 

фон – синий зеленый белый красный   

 цвет символа

.code

start: mov ax, @data

mov ds, ax

 xor ah, ah   ;  режим №3

 mov al, 3

int 10h 

 mov ah, 6   ;  формирование окна

 mov al, 0   ;  прокрутка всего окна

mov bh, 17h   ;  фон синий, буквы светло-серые

 mov ch, 5   ;  координаты углов прямоугольника - окна

mov cl, 20

mov dh, 15

mov dl, 50

int 10h

 mov si, 0

 mov dl, 33   ; номер столбца  X (начало текста минус 1)

m: mov ah, 2   ; установка курсора

 inc dl    ; Х := X + 1  ( = 34 в самом начале )

 mov bh, 0   ; видеостраница

 mov dh, 10   ; строка

 int 10h

 mov ah, 9   ; вывод символа

 mov al, mes[si]  ; символ из массива

 mov bh, 0

 mov bl, atr[si]  ; атрибуты из массива

 mov cx, 1   ; выводить один символ

 int 10h

 inc si    ; увеличение индекса – переход на след. символ

 cmp mes[si], 0  ; это последний символ ?

 jne m    ; если нет – на метку

 mov ah, 0    ; задержка для обозрения

 int 16h

 mov ax, 4C00h

int 21h

end start

  1.  Пример 3

4.5.1 Формулировка задачи

В графическом режиме вывести изображение российского флага и продемонстрировать возможности вывода символов и смены видеостраниц.

4.5.2 Постановка задачи

Установить графический режим № 10h. При установке произойдет автоматическая очистка экрана.

Российский флаг изобразить с позиции (10, 30) – левый верхний угол - размером 120 х 60, соответственно полосы – белая, синяя и красная -  должны быть шириной по 20, рисунок поместить на видеостранице № 0. Предусмотреть остановку до нажатия любой клавиши.

На той же видеостранице (№ 0) вывести символ 0 голубого цвета, координаты: строка – 15, столбец – 30.

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

Переключить видеостраницы – с 0 на 1 и с 1 на 0, каждый раз выполняя задержку до нажатия любой клавиши.

Перед завершением программы восстановить стандартный текстовый режим.

4.5.3 Листинг программы

model small

.stack 100h

.data

mas db 7, 1, 4  ;цвет полос флага: белый, синий, красный

.code

start:

 mov ax, @data

mov ds, ax

 ;графический режим

 mov ah, 0

 mov al, 10h

int 10h

 ; вывод прямоугольника

mov bx, -1

mov si, 120 ; размер по горизонтали

mov di, 60 ; размер по вертикали

mov ah, 0Ch

mov dx, 10 ; координаты левого верхнего угла: строка

mov cx, 30       ; столбец

cvet: inc bx  ; начальный цвет - белый

 mov al, mas[bx]  

next:

 int 10h

  ; продвижение по строке

inc cx  

dec si  ; уменьшение счетчика пикселов в строке

jnz next

  ;строка выведена, переход на следующую

inc dx

mov cx, 30 ; координата начала строки

mov si, 120 ; начальное значение счетчика

dec di  ; уменьшение счетчика строк

cmp di, 40 ; это граница между первой и второй полосами?

je cvet   ; да - вторая полоса синяя

cmp di, 20 ;это граница между второй и третьей полосами?

je cvet   ; да - третья полоса красная

cmp di, 0  ; все строки выведены?

jnz next  ; если не все - в цикл

 xor ax, ax

int 16h

 ;вывод символа на страницу 0 (она активна)

out_c:

mov ah, 2

xor bh, bh  ; страница 0

mov dh, 15  ; координаты курсора

mov dl, 30

 int 10h

mov ah, 9  

mov al, '0'  ; символ 0

mov bl, 9  ; цвет - голубой

mov cx, 1

int 10h

 ; вывод символа на страницу 1 (не активна)

mov ah, 2

mov bh, 1  ; страница 1

mov dh, 15  ; координаты курсора

mov dl, 35

int 10h

mov ah, 9   

mov al, '1'  ; символ 1

mov bl, 14  ; цвет - желтый

mov cx, 1

int 10h

xor ah, ah  ; задержка до нажатия любой клавиши

int 16h

 ; вывод страницы 1

mov ah, 5

 mov al, 1

 int 10h

xor ah, ah

int 16h

 ; вывод страницы 0

mov ah, 5

 mov al, 0

 int 10h

xor ah, ah

int 16h

 ; возврат в текстовый режим

 xor ah, ah

 mov al, 3

int 10h

mov ax, 4C00h

 int 21h

end start

  1.   Задания для самостоятельной работы

Составить программу, выполняющую перечисленные действия. Если нажата не указанная в задании клавиша, завершить программу после вывода сообщения «Программа завершена».

  1.  Создать окно с координатами левого верхнего угла (10, 3) , правого нижнего угла (50, 22), цвет – синий. Окно обрамлено рамкой. В левом верхнем углу окна вывести 4 мерцающих символа $. При нажатии левой кнопки мыши выполнить прокрутку окна вниз на 3 строки, цвет новых строк – зеленый. При нажатии правой кнопки выполнить прокрутку окна вверх на 2 строки, цвет новых строк – желтый.
  2.  В центре окна с заданными координатами и атрибутами вывести слово «ЦЕНТР». После каждого нажатия клавиши СТРЕЛКА-ВВЕРХ выполняется прокрутка на одну строку вверх, и текст появляется в центре новой строки (старый текст «стирается»).
  3.  В левом верхнем углу окна с заданными координатами и атрибутами вывести символ ЗВЕЗДОЧКА. При каждом нажатии клавиши СТРЕЛКА-ВЛЕВО  ЗВЕЗДОЧКА перемещается  в следующий (против часовой стрелки) угол окна.
  4.  Сверху от окна с заданными координатами и атрибутами вывести мерцающее сообщение «ВЕРХ». Если после этого нажата левая клавиша мыши - стереть написанное и погасить курсор. Если нажата правая клавиша мыши, снизу от  окна вывести слово «НИЗ».
  5.  В центре окна с заданными координатами и атрибутами вывести слово «КОМПЬЮТЕР», при нажатии клавиши HOME переместить курсор в форме прямоугольника в начало первой строки окна, при нажатии клавиши END - в конец последней строки и выполнить прокрутку окна дисплея на 3 строки вниз. Цвет новых строк - красный.
  6.  В левом нижнем углу окна с заданными координатами и атрибутами вывести желтым цветом Ваше имя, при нажатии клавиши СТРЕЛКА-ВВЕРХ плавно переместить текст в правый верхний угол окна. С переходом на новую строку цвет символов изменяется.
  7.  В центре строки вывести слово «СЕРЕДИНА», при нажатии клавиши СТРЕЛКА-ВЛЕВО плавно переместить текст в начало строки, при нажатии клавиши СТРЕЛКА-ВПРАВО - в ее конец, каждый раз изменяя атрибуты символов.
  8.  Условно разделить окно с заданными координатами и атрибутами на 2 части по вертикали – левую и правую. При щелчке левой клавишей мыши в любом месте левой части вывести символ  ЗВЕЗДОЧКА желтого цвета в ее центре. Аналогично – для  правой части, но цвет символа  - красный.
  9.  Модель пианино. Последовательность столбцов окна с заданными координатами и атрибутами ( ширина столбца задана ) слева направо поставлена в соответствие последовательности нот гаммы. Столбцы имеют различный цвет, в верху столбца написано название соответствующей ноты. Продемонстрировать  действие модели пианино, «нажимая» клавиши мышкой (левая клавиша – первая октава, правая – вторая).    
  10.  В начале первой строки окна вывести слово «МУЗЫКА», сопроводив его звучанием ноты «ДО». При нажатии клавиши END текст плавно перемещается в правый нижний угол, при этом при переходе на новую строку  звучит следующая нота гаммы.  

PAGE 53




1. Вебкафедра философской антропологии
2. Вариант Часть 1
3. вариантами ответов
4. Темперамент в структуре личности
5. тема. Нервная система совокупность нервных образований в организме человека и позвоночных животных
6. Расчет дисковой зуборезной модульной фрезы
7. Водопостачання та водовідведення
8. Тема4. Первая помощь при открытых повреждениях
9. перестройки 1985 ~ закон О борьбе с алкоголизмом и пьянством 26 апреля 1986 ~ взрыв на Чернобыльской АЭС
10. а Федеральный закон 151ФЗ от 17
11. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата філологічних наук2
12. Этапы эволюции средневекового государства
13. І Історія української літератури- Навчальний посібник
14. тематического образования П
15. ВВЕДЕНИЕ Маркетинг как комплексная равносторонняя и целенаправленная деятельность в области произ
16. Все проблемы среды обитания тесно переплетены
17. за границы и всех ее платежей за границу в течение определенного периода времени
18. це структурна побудова для управління маркетинговими функціями
19.  проста єдина держава яка характеризується відсутністю у адміністративнотериторіальних одиниць ознаки су
20. ИНСТИТУТ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ И ПЕРЕПОДГОТОВКИ РАБОТНИКОВ ОБРАЗОВАНИЯ УДМУРТСКОЙ РЕСП