Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_Lab2.pdf
Скачиваний:
160
Добавлен:
11.05.2015
Размер:
1.1 Mб
Скачать

0000h:0417h, и, дополнительно, второй байт статуса клавиатуры (адрес 0000h:0418h) со следующими значениями:

0:1 – левая Ctrl нажата

1:1 – левая Alt нажата

2:1 – правая Ctrl нажата

3:1 – правая Alt нажата

4:1 – нажата Scroll Lock

5:1 – нажата Num Lock

6:1 – нажата Caps Lock

7:1 – нажата SysReg

6.3.2.Прерывание 1Ah

Функция 00h. Чтение счетчика циклов таймера.

Обработчик прерывания BIOS от системного таймера (Int 8) подсчитывает количество прерываний (каждые 55 мсек или 18,2 раза в секунду) в двойном слове памяти с адресом 0040h:006Сh. Данная функция возвращает накопленное значение (двоичный код) и сбрасывает его в 0. В регистре AL возвращается 0, если содержимое счетчика не превысило значения, соответствующего 24 часам (при достижении этого значения счетчик сбрасывается), иначе возвращается AL= 1.

Вызов: АН = 00h.

Возврат: СХ:DX – число тактов системного времени от полуночи, AL – флаг перехода через сутки.

Примеры возвращаемых значений в СХ:DX: 1 сек 12h или 18,

1 минута 04 44h или 1092,

1 час 1 00 07h или 65543,

24 часа 18 00 B0h или 1 573 040.

Для задержек меньших 14 секунд можно пользоваться только младшим байтом регистра DX

6.3.3. Прерывание 15h

Функция 86h. Задержка

Вызов: AH = 86h, СX:DX = время задержки в мксек.

Возврат: CF = 0 – нормальное исполнение, CF = 1 – функция не поддерживается.

Лабораторная работа №5

Тема работы. Использование сервисных функций BIOS. Прямое программирование страниц буфера видеоадаптера.

Цель работы. Научится работать с прерыванием 10h.

Содержание работы.

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

93

1IDEAL

2MODEL small

3STACK256

4DATASEG

5

string

DB '*',0B0h,'H',0E4h,'E',0E4h,'L',0E4h,'L',0E4h,'O',0E4h,'*',0B0h

6

lngth =

$-string

7CODESEG

8

Start:

mov ax,@data

9

 

mov ds,ax

10

 

mov ah,00h

11

 

mov al,3

12

 

int 10h

13

 

mov ax,0B800h

14

 

mov es,ax

15

 

mov si,offset string

16

 

mov di,160*12+36*2

17

 

mov cx,lngth

18

 

cld

19

 

rep movsb

20

 

mov ah,05h

21

 

mov al,0

22

 

int 10h

23

 

mov ah,01h

24

Exit:

int 21h

25

mov ax,4C00h

26

END

int 21h

27

Start

В данной программе в самом начале устанавливается третий видеорежим (см. табл. 4.2.), совместно с установкой видеорежима происходит очистка экрана.

Затем, уже известным способом, происходит загрузка байтов строки string в память по адресу 0B800h (строки 10-16), которая хранит данные 0-й страницы видеобуфера. После того, как символы загружены в нужные ячейки памяти, происходит подготовка и вызов 5й функции 10-го прерывания (строки 20-22), при этом указывается 0-я страница (строка 21).

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

Примечание. Тект, выводимый на экран данной программой, будет мигать только в полноэкранном режиме. Для перехода в полноэкранный режим используйте сочетание клавиш Alt+Enter.

Задания к работе.

1.Измените данную программу так, чтобы сообщение *HELLO* выводилось бы два раза - в нижнем левом и верхнем правом углах экрана.

2.Выведите в любое место на экране следующий набор символов, учитывая расположение:

1

2 3

4 5 6

7 8 9 0

3.Напишите программу, которая считывает строку символов с клавиатуры и выводит ее черными буквами на белом фоне в центр экрана.

94

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]