сборка получает ввод немедленно

Есть ли какие-либо прерывания в сборке, которые сразу считывают ввод (я имею в виду, не дожидаясь ввода и т. д.). Например: в java в keylistener есть функция, которая выдает ascii-код нажатой клавиши, не дожидаясь подтверждения ввода. Я работаю со сборкой 8086, поэтому лучше отвечайте на сборке 8086.


person TJR    schedule 11.05.2013    source источник


Ответы (3)


Если вы используете что-то с доступным биосом, вы можете использовать int 16H:

mov al, 0
int 16h
; now al contains ascii-code of the key hit

См. 20.4 Интерфейс BIOS клавиатуры.

person pbhd    schedule 11.05.2013
comment
Есть ли простой способ поместить это в цикл и что-то делать только в том случае, если нажатие клавиши отличается от предыдущего? - person Wes Thompson; 09.12.2015

Пример получения 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:

Кортик

person Dirk Wolfgang Glomp    schedule 12.05.2013

В ассемблере есть команда вызова, которая работает в определенных ассемблере и обращается к процедуре нажатия клавиш операционной системы.

вызов osrdch (символ чтения операционной системы)

Однако история 8086 уходит в далекое прошлое… 1980?

Если osrdch работает на вас, то отлично, но тогда, если вы вообще что-то хотели, вам обычно приходилось писать это самостоятельно или выкапывать это из огромного количества журналов программистов, висящих в газетных киосках в те дни.

    call "osrdch" ;o-s read character

    call "oswrch" ;o-s write character

Если боги с вами, то вытащите это на дисплей вду

Упомянутая выше подпрограмма "int 16H" - это в основном то, что она копирует, но ваша ОС может не разрешать прерывания.

person ady    schedule 13.05.2013