; 
; Realizzare un programma in linguaggio Assembler che faccia quanto segue:  
; avendo a disposizione un vettore VETT1 di 10 elementi, ciascuno ampio un byte,
; chieda all'utente quanti valori vuole inserire nel vettore.
.MODEL	small
.stack	100h

.data 
	VETT1 db 10 dup (?)
    msg1  db "Digitare il numero dei elementi che da inserire nel vettore [0-9]: $"
    msg2  db 13,10,"Inserire l'elemento n. $"
    msg3  db " : $"
    msg4  db 13,10,13,10,"Il vettore VETT1 contiene i seguenti elementi: $"
    msg5  db 13,10,"VETT[$"
    msg6  db "] = $"
    N	  db 1

.code

include ..\include\stdio.inc
include ..\include\utils.inc
include ..\include\ioNumbers.inc


;
; Chiede il numero degli elementi
;
numeroElementi proc
	mov		dx,offset msg1
	call	print
	call	get1DigitNumber
	call	output
	sub		al, '0'
	mov		N, al
	call	newLine
	ret
numeroElementi endp

;
; Chiede il valore di ogni elemento e lo memorizza in VETT1
;
inserisciElementi proc
	mov	 cl, N;
	jz	 zeroElements
	mov	 si, 0;
ciclo:
	mov	 dx,offset msg2
	call print
	mov	 ax , si;
	add	 al, '0'
	call output
	mov	 dx,offset msg3
	call print
	call get1DigitNumber
	call output
	sub	 al, '0'
	mov	 VETT1[si],al
	inc	 si
	dec	 cl
	jnz	 ciclo
zeroElements:
	ret
inserisciElementi endp

;
; Stampa gli elementi contenuti in VETT1
;
stampaElementi proc
	; Stampa l'elenco degli elementi inseriti nel vettore
	mov	 cl, N;
	jz	 zeroElementsToPrint
	mov	 si, 0;
	mov	 dx, offset msg4
	call print
ciclo1:
	mov	 dx, offset msg5
	call print
	mov	 ax, si
	add	 al, 30h
	call output
	mov	 dx, offset msg6
	call print
	mov	 al, VETT1[si]
	add	 al, '0'
	call output
	inc  si
	dec	 cl
	jnz  ciclo1
zeroElementsToPrint:
	ret
stampaElementi endp

start:
	call init
    ;
	; Inizio Esercizio
	;

    ; Chiede il numero dei caratteri da inserire
    call numeroElementi
    call inserisciElementi
    call stampaElementi
	
	;
	; Fine del programma
	;
	call pressKeyAndExit
end start