Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Ввод информации с клавиатуры средствами MS-DOS



Функции прерывания 21h MS-DOS для ввода информации с клавиатуры

 

MS-DOS имеет целую группу функций прерывания 21h для выполнения ввода информации с клавиатуры. Последователь­ность действий системы при вводе с клавиатуры такова. Фун­кция MS-DOS вызывает драйвер клавиатуры, пере­давая ему запрос на ввод одного символа из буфера клавиату­ры. Драйвер, выполняя запрос, обращается к нужной функ­ции прерывания 16h BIOS. ISR BIOS прерывания 16h читает из буфера клавиатуры нужное слово и передает в драйвер. Драйвер возвращает байт (обычно младший) в MS-DOS. Та­ким образом, функции MS-DOS и опирающиеся на них функ­ции библиотеки Turbo С слабо зависят от особенностей аппа­ратуры, поскольку система от нее изолирована двумя слоями программного обеспечения - драйверами и BIOSом.

Далее приводится характеристика функций MS-DOS, ис­пользуемых для ввода с клавиатуры.

AH=01h - ввод с ожиданием со стандартного устройства ввода (клавиатуры). Выполняется "эхо" на экран вводимых символов. ASCII-код прочитанного символа помещается в AL. Если нажимается специаль­ная клавиша, в AL возвращается 0, а второе обращение к функ­ции возвращает расширенный скэн-код клавиши.

AH=06h - ввод-вывод с консоли. Если DL = FFh, выполняет­ся ввод со стандартного устройства ввода без ожидания. Если буфер пуст, функция сообщает об этом установленным в 1 флагом нуля (ZF). В противном случае в регистре AL возвра­щается ASCII-код прочитанного символа.

AH=07h - ввод с консоли с ожиданием без "эха" на экран. ASCII-код прочитанного символа возвращается в AL. Если нажимается специальная клавиша, передаваемое в AL значе­ние равно нулю, а второе обращение к функции возвращает расширенный скэн-код клавиши. Функция не выполняет "филь­трацию" ввода с клавиатуры. Это значит, что нажатие клави­ши Backspace не стирает символ на экране, а только сдвигает курсор. Нажатие ENTER не переводит строку, а только пере­мещает курсор на начало строки.

AH=08h - подобна АН=07h, за исключением того, что если обнаруживается нажатие комбинации клавиш Ctrl-Break, вы­зывается прерывание 23h.

AH=0Bh - проверка состояния стандартного ввода. Воз­вращает в регистре AL значение FFh, если буфер клавиатуры не пуст, и 0 в противном случае. Функцию следует использовать перед выполнением фун­кций АН=01h, 07h и 08h для того, чтобы избежать ожидания ввода, если он отсутствует. Кроме того, функция использует­ся как средство проверки того, нажата ли комбинация клавиш Ctrl-Break, если программа долгое время выполняет работу, не связанную с обращением к функциям MS-DOS. Периоди­ческое выполнение функции позволяет аварийно завершить про­грамму, например, в случае ее зацикливания.

AH=0Ch - ввод с клавиатуры с очисткой буфера. Значе­ние в регистре AL содержит номер выполняемой функции: 01, 06, 07, 08 или 0Ah. Поведение функции и возвращаемые зна­чения описаны ранее в спецификации функций АН=01, 06, 07,08 или 0Ah.

Рассмотренные функции MS-DOS для ввода с клавиатуры могут вызываться напрямую из Си-программы через функ­ции Turbo С getinterrupt(), int86(), intr() и т.п., либо неявно функциями ввода Turbo С.

 

Функции библиотеки Turbo С

 

#include <conio.h>

Int getch (void)

Выполняет ввод с клавиатуры через функцию MS-DOS АН=07h. Turbo С не выполняет "эха" ввода. В этой связи полезна для организации интерфейса с пользователем, при котором нажатие той или иной клавиши вызывает немед­ленную реакцию программы без отображения введенного символа на экране.

 

#include <conio.h>

Int getche (void)

 

Выполняет небуферизуемый ввод с клавиатуры через функцию MS-DOS AH=07h. Turbo С "эхоирует" ввод на экране. Перевод строки происходит при достижении правой вертикальной границы текущего активного окна.

 

#include <conio.h>

char *getpass(char * prompt)

 

Выводит на экран ASCIIZ-строку, на начало которой указывает prompt, a затем принимает с клавиатуры без "эха" строку символов. Вводимые символы (не более 7) помещаются во внутреннюю статическую память. Функция воз­вращает указатель на внутреннюю статическую строку, переопределяемую каж­дым новым обращением к функции. Основное назначение данной функции - ввод паролей в программе без отображения их на экран.

 

#include <conio.h>

Int kbhit (void)

 

Проверяет, пуст ли буфер клавиатуры. Если в буфере есть символы, функ­ция возвращает ненулевое значение, в противном случае она возвращает 0. Использует функцию 0Bh MS-DOS. Является удобным средством предотвра­щения "зацикливания" или "повисания" при ожидании невозможного в дан­ный момент события. Кроме того, при выполнении функции 0Bh осуществляется проверка нажатия комбинации клавиш Ctrl-Break, что позволяет выполнить ава­рийное завершение программы.

 



Просмотров 834

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!