ax=11h int 16h



  • hi,

    wenn ich folgendes mache:
    [code]
    hang:
    asm mov ax, 0000h
    asm int 16h

    asm mov ah, 11h
    asm int 16h
    asm mov [key], al

    writesign(key);

    goto hang;
    [code]
    dann müsste ich ja eigentlich die buchstaben am bildschirm sehen die ich eingebe... aber den buchstaben den ich gedrückt habe wird erst am bildschirm angezeigt nachdem ich 16 andere buchstaben gedrückt habe... 😕 woran liegt das?

    MFG Marcel



  • Der Int 16h ax=0000h wartet, bis eine Taste gedrueckt wurde, gibt den ASCII-Code in al und den Keyboard scan-code in ah zurueck. Ausserdem leert dieser Interrupt den Tastaturpuffer, das koennte erklaehren, warum bei dem 2. Interrupt-aufruf nichts sinnvolles rauskommt.
    Ich wuerde dir raten, den int 16h ax=1100h-aufruf wegzulassen.



  • danke 🙂 jetzt funktioniert es



  • hi nochmal,

    der code funzt jetzt zwar... aber ich will nicht auf benutzereingaben warten sondern nur prüfen ob eine taste gedrückt ist oder nicht. Wie funktioniert das?

    MFG Marcel



  • Dazu musst Du Funktion 01h (oder 11h) und 00h in anderer Reihenfolge aufrufen.
    Die Funktion 11h oder 01h prueft ob eine Taste gedrueckt wurde.
    Sollte das nicht der Fall sein, ist ax=0 und zf=1.
    Wurde eine Taste gedrueckt, enthaelt al den ASCII-Code und ah den Scancode (wie Funktion 00h) und ist zf=0.
    Wenn also eine Taste gedrueckt wurde, muss noch Funktion 00h des int 16h aufgerufen werden, um das eingegebene Zeichen wieder vom Tastaturpuffer zu loeschen. (Sonst gibts nen Ueberlauf und es piept nurnoch, wenn eine Taste gedrueckt wird ;)) Das was dieser Interrupt dann in ax zurueck gibt kannst Du dann von deinem Programm verarbeiten lassen...

    Bsp.:

    @@NoKey:
    mov ah,01h
    int 16h ;Tastaturstatus abfragen
    jz  short @@NoKey ;=>keine Taste wurde gedrueckt.
    xor ax,ax
    int 16h
    ;... Taste auswerten...
    mov dl,al
    mov ah,06h
    int 21h ;ASCII-Code der gedrueckten Taste auf den Bildschirm schreiben.
    jmp short @@NoKey
    

Anmelden zum Antworten