Ciao,
Usa l'int 16h. Prima o dopo il DOS non ha importanza(qualunque cosa significhi "prima" del DOS), se stai scrivendo in asm un programma che usa interrupt immagino tu stia utilizzando tasm/masm/nasm o l'asm inlinea dei vecchi compilatori a 16bit (TurboC,TurboPascal)... il codice dovrebbe essere comunque ancora compatibile con i nuovi SO...
Con ah=0 in ingresso hai l'attesa indefinita di un carattere (come l'int21 citato). Il carattere viene restituito in ax (scancode+ascii).
Con ah=1 controlli se è stato premuto un tasto... in caso lo ottieni in ax(scancode+ascii). il flag di zero viene impostato se è presente un tasto, resettato (0) se non è presente, in modo che tu possa usare jz,jnz (je,jne) a piacere.
Con ah=2 hai lo stato dei vari tasti ALT, Ctrl, Ins, CapsLock, ScrollLock, Num Lock e dei due shift (dx e sx). Il risultato, come sempre in ax.
L'alternativa è scriverti un gestore di tastiera e rimpiazzare l'handler standard dell'int9... in questo caso ovviamente dovrai implementare una routine di interrupt ed è possibile che windows non ti permetta un comportamento del genere...
Per ulteriori informazioni ti consiglio la Ralph Brown List... nonostante sia datata (1999) è comunque sempre pienamente utilizzabile se programmi dos vecchio stampo...
Ciaociao
Venite a visitarci qui:
http://www.bottomap.co