Читайте также:
|
|
При программировании работы с клавиатурой могут быть использованы прерывания 16Н BIOS и прерывания 21Н (АН= 1, б, 7, 8, А, В, С) DOS.
Прерывание 16Н BIOS предусматривает достаточно простые операции обмена данными с клавиатурой, полезные при написании программ, выполняемых независимо от операционной системы DOS. Так, при АН=0 и 1 считываются из буфера клавиатуры scan-код клавиш в регистр АН и ASCII-код клавиш в регистр AL; при АН=2 в AL возвращается байт состояния клавиатуры — состояние управляющих клавиш: Shift, Ctrl, Alt, Scroll Lock, Mum Lock и Insert; при АН=3 — устанавливаются режимы работы клавиатуры в IBM PCjr.
Ввод с клавиатуры по прерыванию 21Н DOS предполагает:
1. Чтение символа с клавиатуры (с ожиданием ввода) и отображением символа на экране дисплея: АН=1 или АН=6 и DL=OFFH; то же, но без отображения символа на экране дисплея: АН=7 или АН=8. Считанный символ (ASCII-код) — в регистре AL, (scan-код не формируется). Если к моменту запроса на чтение символа клавиша еще не нажата, то управление прерванной программе не будет возвращено до тех пор, пока клавиша не будет нажата. Если код клавиши расширенный (клавиши F1-F10, Alt, Ctrl и т. д.), то необходимо повторное чтение. Пример фрагмента программы чтения символа:
mov АН, 1
Int 21H
2. Чтение строки символов с буферизацией: АН=ОАН. Для инициализации такого
чтения необходимо:
- задать буфер, указав в нем число символов строки, подлежащих вводу, директивой: buf DB n.0,0……..0,0 (buf — имя поля, которое, в принципе, может быть и любым другим); количество нулей в директиве должно быть на два больше, чем n (n — максимальное количество вводимых символов), на место следующего «О» будет после ввода записано количество фактически введенных символов, на место последующих «О» будут введены ASCII-коды символов строки и еще один «О» для кода клавиши Enter — 13;
- занести в регистр DS: DX адрес буфера.
При выполнении рассматриваемого прерывания управление прерванной (основной) программе возвращено не будет до тех пор, пока не нажаты все клавиши и клавиша Enter. При нажатии каждой очередной клавиши ее код записывается в буфер клавиатуры и отображается на дисплее, но из буфера поступит в основную программу (в поле buf) только после нажатия клавиши Enter. Если до Enter клавиш нажато больше, чем указано в буфере, то раздастся звонок и лишние символы восприняты не будут.
Пример фрагмента программы чтения строки символов:
buf DB 9,0,0.0,0.0,0,0,0,0,0,0
mov АН, ОАН
mov DX, offset buf
int 21H
В поле буфера будут записаны ASCII-коды символов строки, и если в программе предусмотрены операции над двоичными кодами символов (цифр) строки, то необходимо преобразовать ASCII-коды в двоичный код числа, используя, например, процедуру STR2BIN.
3. Чтение состояния клавиатуры: АН=ОВН. В регистр AL записывается 0, если буфер
клавиатуры имеет хотя бы один символ.
4. Очистка буфера клавиатуры и вызов функции: АН=ОСН. Обнуляется буфер клавиатуры и инициируется выполнение одной из 5 функций прерывания 21Н; в этом случае номер вызываемой функции должен быть записан не в регистре АН, а в регистре AL (AL-1,6,7,8 или ОА).
5. Ввод с клавиатуры текстового файла: AH=3FH. Используются функции расширенного управления файлами MS-DOS по файловому указателю. Пример фрагмента программы для ввода с клавиатуры текстового файла Text, содержащего 50 байт:
text db 50 dupC ');задание поля памяти для ввода
mov АН. 3FH
mov ВХ, 0 указание устройства ввода
mov CX. 50 указание числа вводимых байтов
mov DX. Offset text:указание начального адреса
;поля памяти для ввода
Int 21H
Дата добавления: 2015-12-07; просмотров: 76 | Нарушение авторских прав