0

组装中是否有任何中断会立即读取输入(我的意思是无需等待输入等)。例如:在 java 中,keylistener 中有一个函数给出按下的键的 ascii 代码,而无需等待确认输入。我使用程序集 8086,因此在程序集 8086 中的答案更好。

4

3 回答 3

1

如果您正在运行具有可用 BIOS 的东西,则可以使用 int 16H:

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

请参见20.4 键盘 BIOS 界面

于 2013-05-11T23:22:10.527 回答
1

在不使用软件中断但使用自己的 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:

短剑

于 2013-05-12T09:02:31.050 回答
0

汇编中有一个调用命令,它在某些汇编程序中工作并访问操作系统按键例程

调用 osrdch(操作系统读取字符)

不过,8086 的东西正在以一种很长的方式回归……1980 年?

如果 osrdch 对你有用,那很好,但在那时,如果你想要任何东西,你通常必须自己写,或者从当时在报刊亭周围漂浮的大量程序员杂志中挖掘出来

    call "osrdch" ;o-s read character

    call "oswrch" ;o-s write character

如果众神与你同在,那将把它放到 vdu 显示器上

上面提到的“int 16H”例程基本上就是它复制的内容,但是您的操作系统可能不允许中断

于 2013-05-13T00:15:51.873 回答