Se devi visualizzare i primi 10 valori, comincia a ragionare su tali numeri. Questi sono
0, 1, 1, 2, 3, 5, 8, 13, 21, 34
e non tutti sono fatti da una cifra. Quindi, per farla semplice, prima di tutto, devi prevedere queste aree di dati
un byte per il contatore (inizializzato a 10)
un byte per il valore attuale della sequenza (inizializzato a 0)
un byte per il valore futuro della sequenza (inizializzato a 1)
e una funzione che, ottenuto un byte in ingresso, ottenga le decine e le unità, le trasformi in ASCII e le visualizzi (le decine solo se maggiori di 0)
Per il "main" ti basta un ciclo che sfrutti il contatore in cui
- chiami la funzione di visualizzazione che opera sul byte del valore attuale
- sommi il valore attuale e il prossimo in un registro temporaneo
- sposti il valore futuro in quello attuale
- memorizza il valore del registro temporaneo nel valore futuro
- decrementi il contatore
- se il contatore non è zero torni al primo punto
EDIT: per tagliare la testa al toro, dai un'occhiata a questo
per i dati:
codice:
count db 10
att db 0
fut db 1
per il codice:
codice:
ciclo:
mov al,att
mov ah,0h
mov cl,0Ah
div cl
push ax
mov dl,al
test al,al
jz nodec
or dl,30h
mov ah,2h
int 21h
nodec: pop ax
mov dl,ah
or dl,30h
mov ah,2
int 21h
mov dl,20h
mov ah,2h
int 21h
mov bl,fut
mov al,bl
add bl,att
mov att,al
mov fut,bl
dec count
jnz ciclo
mov ax,4C00h
int 21h