程序集立即获得输入

时间:2013-05-11 23:06:42

标签: assembly input keylistener x86-16 interruption

汇编中是否有任何中断立即读取输入(我的意思是不等待输入等)。 例如:在java中,在keylistener中,函数给出了按下的键的ascii代码,而无需等待确认输入。 我使用程序集8086,所以在8086汇编中回答更好。

3 个答案:

答案 0 :(得分:1)

如果您正在运行可用bios的东西,可以使用int 16H:

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

请参阅20.4 The Keyboard BIOS Interface

答案 1 :(得分: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:

德克

答案 2 :(得分:0)

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

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

8086的东西虽然回归了......但1980年?

如果osrdch适合你那么好但当时如果你想要任何东西你通常不得不自己写它或者从那些漂浮在他们周围的报刊经销商的大量程序员杂志中挖掘出来

    call "osrdch" ;o-s read character

    call "oswrch" ;o-s write character

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

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