***** Google.Поиск по сайту:


Лекции по Вычислительным машинам, системам и сетям   

5. Программирование на языке Ассемблер

5.10. Работа с клавиатурой и экраном

Информация, которую компьютер выводит на экран, располагается в определенной области памяти. В стандартном текстовом режиме эта область начинается с адреса b8000h. В этом режиме экранная область памяти разбита на несколько страниц. В любой момент времени на экран выводится содержимое одной из этих страниц, она называется активной. Таким образом, программист может заранее подготовить информацию в пассивной странице, а затем быстро сделать эту страницу активной. Но не будем заниматься этим, а будем всегда работать только с нулевой страницей. В рассматриваемом текстовом режиме экран имеет 25 строк (нумерация 0 – 24) и 80 столбцов (0 – 79). Таким образом, для описания текущего состояния экрана в памяти отводится 25×80 = 2000 слов. Каждое из этих слов описывает одно знакоместо. В младшем байте такого слова содержится ASCII-код выводимого символа, а в старшем байте – атрибуты, с которыми этот символ выводится на экран (цвет символа и цвет фона в знакоместе). Байт атрибутов имеет формат, представленный на рис. 5.8 (подробней см. Приложение).

D7

D6

D5

D4

D3

D2

D1

D0

Рис. 5.8

Здесь разряды D2 D0 определяют цвет символа (000 – черный, … 111 – белый). Разряд D3 задает яркость цвета символа. Разряды D6D4 задают цвет фона (000 – черный, … 111 – белый). Разряд D7 задает яркость фона или, значительно реже, мигание символа. Назначение разряда D7 (мигание/яркость) можно менять программным путем (см. разд. 5.2 в Приложении).

Все клавиши на клавиатуре делят на символьные и функциональные. Символьные клавиши (аб, …12,...) вводят символы, которые затем можно отображать на экране. То есть для символьных клавиш имеется их ASCII-код. Функциональные клавиши (F1,…DEL,…INS, …) ASCII-кода не имеют. При нажатии любой клавиши на клавиатуре происходит следующее. Контроллер клавиату-ры выставляет СКЭН-код (номер) нажатой клавиши в порт с адресом 60h и через контроллер прерываний формирует на процессор запрос на прерывание. В IBM–подобных компьютерах этому запросу присвоен тип 9 («девятое прерывание»). Обработчик «девятого прерывания» читает СКЭН-код из порта 60h, переводит его в ASCII-код, если нажата символьная клавиша (для функциональных ASCII-код берется равным 0), и помещает и СКЭН- и ASCII-код в расположенный в памяти кольцевой буфер клавиатуры (подробно буфер клавиатуры описан в Приложении). Программы же считывают информацию уже из этого буфера.

Можно напрямую работать с видеопамятью и кольцевым буфером. Например, для того чтобы очистить экран, достаточно записать во все слова видеопамяти ASCII-код пробела с соответствующими атрибутами. Допустим, так:

mov cx, 2000       ; число повторений цикла

mov ax, 0b800h

mov es, ax           ; настраиваем es на начало видеопамяти

mov si, 0              ; в si  смещение в видеопамяти

cikle:

mov word ptr es:[si], 7020h       ; записываем в текущее ;знакоместо код и атрибуты 20h – ASCII- код пробела,

;70h – «черным по белому»

add si, 2          ; переходим к следующему знакоместу

;(слову)

loop cikle.

Работа с аппаратурой напрямую, хотя и обеспечивает наиболее высокое быстродействие, чревата ошибками. Рекомендуем новичкам пользоваться сервисными подпрограммами, которые DOS и BIOS предоставляют пользователю через программные прерывания int n. Рассмотрим некоторые прерывания, обеспечивающие сервис по работе с экраном и клавиатурой.




***** Яндекс.Поиск по сайту:



© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.