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:
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.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
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![]()

Rispondi quotando