; 
; Siano dati due vettori avente nome simbolico VETT1 e VETT2 contenenti
; 20 elementi ampi 1 byte, e una variabile avente nome simbolico N, contenete
; un numero compreso tra 1 e 20.
; Si calcoli la somma degli elementi corrispondenti dei due vettori lasciando
; i risultati nei corrispondenti elementi del secondo vettore.
;
.model tiny
.data
    VETT1 db 20 dup (?)
    VETT2 db 20 dup (?)
    N     db 3

 .code
	.startup

; Inizio esercizio
	mov cl, N		; CL <- N ; CL e` l'indice che indica del ciclo che fornisce la
				    ; somma degli elementi.
	mov si, 0 		; SI <- 0 ; SI e` l'indice che punta all'elemento corrente del
				    ; vettore.
	mov al, 0		; AL <- 0 ; azzeriamo il contenuto del registro AL, che utilizzeremo
					; per salvare il risultato temporaneo della somma.
 
ciclo:
 	mov al, vett1[si]	; AL <- VETT[SI] : sommo ad AL il contenuto della locazione
 					; di memoria avente indirizzo VETT + SI.
 	add vett2[si],al; VETT2[SI] += AL : sommo all'elemento di VETT2 avente indice SI
 					; il contenuto di AL (che contiene l'elemento corrispondente
 					; del primo vettore) 
 	inc si			; SI++ : incremento l'indice per puntare al successivo elemento
 					; del vettore.  
 	dec cl			; CL-- : decremento l'indice che conta i passi del ciclo
 	jnz ciclo		; CL == 0 ? se no salta all'istruzione posta all'etichetta ciclo
 					; altrimenti prosegui.
; Fine esercizio

	mov   ah,0		; Chiamata alla funzione del bios 
	int   16h		; che attende la pressione di un tasto.
	.exit
end