Есть ли какие-либо прерывания в сборке, которые сразу считывают ввод (я имею в виду, не дожидаясь ввода и т. д.). Например: в java в keylistener есть функция, которая выдает ascii-код нажатой клавиши, не дожидаясь подтверждения ввода. Я работаю со сборкой 8086, поэтому лучше отвечайте на сборке 8086.
сборка получает ввод немедленно
Ответы (3)
Если вы используете что-то с доступным биосом, вы можете использовать int 16H:
mov al, 0
int 16h
; now al contains ascii-code of the key hit
См. 20.4 Интерфейс BIOS клавиатуры.
Пример получения ASCII при нажатии клавиши на нашей клавиатуре без использования программных прерываний, но с использованием собственной ASCII-таблицы:
KEYTAB DB 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D
DB 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1E,0x1F
DB 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2B,0x2C,0x2D,0x2E,0x2F
DB 0x30,0x31,0x32,0x33,0x34,0x35,0x39
DB 0x56
tablen = ($-KEYTAB)
ASCII DB "1234567890ß'" ; table with language-specific letters
DB "qwertzuiopü+as"
DB "dfghjklöä^#yxcv"
DB "bnm,.- "
DB "<"
asclen = ($-ASCII)
;--------------------------------------------------
cli
in al,0x64 ; get status
test al,1 ; output buffer empty?
jz short NOKEY
test al,0x20 ; PS2-mouse byte?
jnz short NOKEY
in al,0x60 ; get one byte from keyboard
sti
; using an own ASCII-table for to convert the keyboardcodes in AL to ASCII
NOKEY:
Кортик
В ассемблере есть команда вызова, которая работает в определенных ассемблере и обращается к процедуре нажатия клавиш операционной системы.
вызов osrdch (символ чтения операционной системы)
Однако история 8086 уходит в далекое прошлое… 1980?
Если osrdch работает на вас, то отлично, но тогда, если вы вообще что-то хотели, вам обычно приходилось писать это самостоятельно или выкапывать это из огромного количества журналов программистов, висящих в газетных киосках в те дни.
call "osrdch" ;o-s read character
call "oswrch" ;o-s write character
Если боги с вами, то вытащите это на дисплей вду
Упомянутая выше подпрограмма "int 16H" - это в основном то, что она копирует, но ваша ОС может не разрешать прерывания.