; Si calcoli la somma degli N elementi di un vettore.
;
.MODEL	small
.stack	100h

include ..\include\utils.inc
include ..\include\stdio.inc
include ..\include\ioNumbers.inc

.data
    VETT 	db 3,4,7,5,9,2,8,6,1,0
    N    	db 3
    msg1	db "Programma per la somma degli elementi di un vettore.",13,10,13,10;,"$"
    msg2	db "Elementi da sommare: $"
    msg3	db "Elemento [$"
    msg4	db "] = $"
    msg5	db "Somma = $"

.code
start:
	call init
;;; Inizio esercizio
	mov dx, offset msg1
	call print			; Stampa msg1
	;mov dx, offset msg2
	;call print			; Stampa msg2
	mov al, N			
	call printBin8toDecASCII	; Stampa il num. di elem. da sommare
	call newline	; Stampa i caratteri per andare 'a capo';
	
	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 bl, 0		; AL <- 0 ; azzeriamo il contenuto del registro AL, che utilizzeremo
					; per salvare il risultato temporaneo della somma.
 
ciclo:
	mov dx, offset msg3	; Stampa "Elemento ["
	call print	
	mov ax, si			; Stampa l'indice corrente del vettore
	call printBin8toDecASCII
	mov dx, offset msg4	; Stampa "] = "
	call print
	mov al, vett[si];	; Stampa il valore dell'elemento corrente del vettore
	call printBin8toDecASCII
	call newline		; Stampa i caratteri per andare 'a capo'

	; Somma degli elementi
 	add bl, al		; AL <- VETT[SI] : sommo ad AL il contenuto della locazione 
 					; di memoria avente indirizzo VETT + SI.
 	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.
 					
 	mov dx, offset msg5 ; Stampa "Somma = "
 	call print
 	mov al, bl
 	call printBin8toDecASCII
 	call newline
 	
;;; Fine esercizio
	call pressKeyAndExit
	
stampaElemVett proc
	
	Ret
stampaElemVett endp

end start