Assembler - язык неограниченных возможностей


Средства BIOS - часть 2


/p>


Символ остается в буфере клавиатуры, хотя некоторые BIOS удаляют символ из буфера при обработке функции 01h, если он соответствует расширенному ASCII-коду, отсутствующему на 84-клавишных клавиатурах.


INT 16h, АН = 05h — Поместить символ в буфер клавиатуры

Ввод: АН = 05h
СН = скан-код
CL = ASCII-код
Вывод: AL = 00, если операция выполнена успешно
AL = 01h, если буфер клавиатуры переполнен
АН модифицируется многими BIOS


Обычно можно поместить 0 вместо скан-кода в СН, если функция, которая будет выполнять чтение из буфера, будет использовать именно ASCII-код. Например, следующая программа при запуске из DOS вызывает команду DIR (но при запуске из некоторых оболочек, например FAR, этого не произойдет).

; ungetch.asm ; заносит в буфер клавиатуры команду DIR так, чтобы она ; выполнилась сразу после завершения программы ; .model tiny .code org 100h ; СОМ-файл start: mov cl,'d' ; CL = ASCII-код буквы "d" call ungetch mov cl,'i' ; ASCII-код буквы "i" call ungetch mov cl,'r' ; ASCII-код буквы "r" call ungetch mov cl,0Dh ; перевод строки ungetch: mov ah,5 ; AH = номер функции mov ch,0 ; CH = 0 (скан-код неважен) int 16h ; поместить символ в буфер ret ; завершить программу

end start

INT 16h, AH = 02h, 12h, 22h — Считать состояние клавиатуры

Ввод: АН = 02h (83/84-key), 12h (101/102-key), 22h (122-key)
Вывод: AL = байт состояния клавиатуры 1
АН = байт состояния клавиатуры 2 (только для функций 12h и 22h)


Байт состояния клавиатуры 1 (этот байт всегда расположен в памяти по адресу 0000h:0417h или 0040h:0017h):

    Бит 7: Ins включена

    Бит 6: CapsLock включена

    Бит 5: NumLock включена

    Бит 4: ScrollLock включена

    Бит 3: Alt нажата (любая Alt для функции 02h, часто только левая Alt для 12h/22h)

    Бит 2: Ctrl нажата (любая Ctrl)

    Бит 1: Левая Shift нажата

    Бит 0: Правая Shift нажата

Байт состояния клавиатуры 2 (этот байт всегда расположен в памяти по адресу 0000h:0418h или 0040h:0018h):




Начало  Назад  Вперед