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