Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_lab__rab_spo.doc
Скачиваний:
14
Добавлен:
05.09.2020
Размер:
433.66 Кб
Скачать

2.2.1.2. Справка о наличии символа

Функция AH=01h сбрасывает флаг нуля в 0 (ZF=0), если в буфере клавиатуры есть символ для чтения, и устанавливает флаг в 1, если буфер пуст. Этот символ и его скэн-код будут помещены в регистры AL и AH соответственно. Символ остается в буфере.

MOV AH,01h

INT 16h

2.2.1.3 Определение текущего состояния клавиатуры

Функция 02h помещает в регистр AL содержимое первого из двух байтов состояния клавиатуры с абсолютными адресами 417h и 418h. Если нужно узнать содержимое второго байта, его необходимо прочитать из памяти.

Содержимое первого байта (417h):

Бит клавиша значение, когда бит = 1

7 Ins ; режим вставки включен

6 CapsLock ; фиксация верхнего регистра

5 NumLock ; фиксация цифровой клавиатуры

4 ScrollLock ; прокрутка экрана включена

3 Alt ; клавиша нажата

2 Ctrl ; клавиша нажата

1 Shift ; клавиша нажата

Содержимое второго байта (418h):

7 Ins ; клавиша нажата

6 CapsLock ; клавиша нажата

5 NumLock ; клавиша нажата

4 ScrollLock ; клавиша нажата

3 Ctrl-NumLock ; режим паузы

Остальные биты не используются.

MOV AH,02h

INT 16h

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

Тем не менее целесообразней пользоваться более гибкими возможностями системных функций для работы с клавиатурой, вызываемых с помощью прерывания 21h.

2.2.2 Системные функции dos для работы с клавиатурой

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

а) ожидают ли ввода или нет;

б) выводят ли после чтения символ на экран;

в) проверяется ли при их выполнении наличие "Ctrl-Break" или нет.

2.2.2.1 Ввод с клавиатуры с эхоотображением

Функция 01h ожидает ввода символа, если буфер клавиатуры пуст, а затем выводит его на экран в текущую позицию курсора. Введенный символ помещается в регистр AL. Если AL содержит 00Н, это означает, что получен расширенный ASCII-код, второй байт которого будет прочитан при следующем выполнении функции. При выполнении функции осуществляется проверка наличия "Ctrl-Break". Клавиша Esc игнорируется. Клавиша Backspace сдвигает курсор на одну позицию влево, но символ, находящийся в этой позиции, не стирается. Клавиша Enter вызывает перемещение курсора в первую позицию текущей строки (нет автоматического перевода строки).

MOV AH,01h ; номер функции

INT 21h ; ожидаем нажатия клавиши

CMP AL,0 ; расширенный код ?

JE EXT_CODE ; если да, то на процедуру обработки

........ ...... .. расширенного кода

EXT_CODE: INT 21h ; получаем в AL номер кода

CMP AL,77 ; проверка на (-->)

JNE C_R ; если нет, то следующая проверка

JMP CUR_RIT ; если да, то на процедуру

C_R: CMP AL,75 ; и т.д.

Соседние файлы в предмете Системное программное обеспечение