Buonasera,

Il mio codice in asm 32bit è destinato a un programma che al click di un tasto, parta un conteggio da 0a9 sullo stesso carattere (sostituendo con la funzione 0Ch) e al click dello stesso tasto, finisca il conteggio.
Il problema è il seguente: non mi funziona neppure lo stop con un tasto qualsiasi, o per meglio dire solo in una parte:

codice:
;Si codifichi un programma che attenda che sia premuto un tasto per iniziare a visualizzare un conteggio
;su video da 0 a 9, sempre nella stessa posizione. La visualizzazione del conteggio è ripetuta fino a quando
;non è premuto di nuovo il tasto
;Funzioni utili:
;02h
;07h
;09h
;0bh
;0ch

		.model small
		.stack
		.data
			messInizio db "Premi un tasto per far partire il conteggio$"
			messCont db "Premi lo stesso tasto per far finire il conteggio$"
			messFine db "Fine$"
			divDieci db 0Ah
			tasto db 0h
			resto db 0h
			conteggio dw 0h
			acapo db 0Dh,0Ah,"$"
			inizioRiga db 0Dh,"$"
		.code
			mov ax,@data
			mov ds,ax
			
			lea dx,messInizio
			mov ah,09h
			int 21h
			lea dx,acapo
			mov ah,09h
			int 21h
			lea dx,messCont
			mov ah,09h
			int 21h
			lea dx,acapo
			mov ah,09h
			int 21h
			
			mov ah,01h
			int 21h
			mov tasto,al
			
	conta:
				
				mov ax,conteggio
				div divDieci
				mov resto,ah
				add resto,30h
				
				;		ritardo
;				mov di,0h
;				mov cx,0h
;	cicloRitardo1:	inc di
;	cicloRitInt1:		inc cx
;						cmp cx,0FFFh
;						jne cicloRitInt1
;					cmp di,09FFh
;					jne cicloRitardo1
				
				;		inizio riga
				lea dx,inizioRiga
				mov ah,09h
				int 21h
				
				;		stampa resto
				mov ah,0Ch
				mov al,06h
				mov dl,resto
				int 21h
				
				;		prevenzione overflow
				inc conteggio
				cmp conteggio,100h
				jne continua
				mov conteggio,0h
				
	continua:				
				;		0Bh
				;	se al==0FFh, è disponibile un carattere
				;	se al==00h, non è disponibile nessun carattere
				;	quindi cliccando un tasto, il ciclo dovrebbe finire.
				mov ah,0Bh
				int 21h
				cmp al,00h
				je conta
	
	fine:
			
			lea dx,acapo
			mov ah,09h
			int 21h
			lea dx,messFine
			mov ah,09h
			int 21h
			
			mov ah,4ch
			int 21h
		end
Allora, l'uscita dal ciclo me lo fa quando vuole lui. Io penso che lo faccia quando siamo in prossimità dell'istruzione 0Bh, infatti se aggiungo il ritardo è praticamente impossibile farlo fermare, infatti non ci sono riuscito in vari tentativi.
Le mie domande sono queste:
1. Come faccio a eseguire le istruzioni, tenendo sempre acceso il buffer per controllare alla fine del ciclo, se è stato premuto qualcosa;
2. Come faccio a ritardarlo senza problemi di tempistica (penso che risolvendo la 1. si risolva anche questa);
3. Con la funzione 0Bh, so che mi ritorna in AL 0FFh se un tasto è stato premuto, ora mi chiedo dove posso trovare il codice ASCII di sto benedetto tasto (il prof mi sembra che avesse detto di fare "in al,60h" per accedere al PIC, e in 60h troveremo il nostro valore).

Grazie per la lettura