Allora per quanto riguarda l'attesa di un carattere non bloccante cioé che non blocca l'esecuzione del programma bisogna usare una tecnica, quella del polling.
Il polling consiste nel attendere un interrupt da parte del sistema operativo leggendo registri dedicati.Quindi a te non resta altro da fare che leggere un valore presente in un registro apposito e vedere se contiene il dato o no, se lo contiene significa che è stato premuto un tasto dalla tastiera altrimenti continui con il tuo codice.
Questo è l'aspetto teorico ovviamente e pretico per quanto riguarda l'assembler, ma per il c prova in questo post:
http://groups.google.it/groups?hl=it....it%26rnum%3D1
Spero di esserti stato di aiuto
CIaux
The_Lince