Salve ragazzi..ho da poco iniziato a studiare l' assembly x86 e utilizzo emu8086 per provare le procedure. Sono proprio a zero quindi ho iniziato con qualche programmino facile facile ma già ci sono i primi problemi..se potreste aiutarmi a trovare gli errori in questo che dovrebbe servire a calcolare la media, facendo la somma di tutti gli elementi del vettore maggiori di zero...Grazie milleee
; PROCEDURA CHE CALCOLI IL VALOR MEDIO DEI NUM POSITIVI DI UN VETT DI INTERI CON SEGNO
LUNG EQU 10
.model small
data segment
VETT DW LUNG DUP 1,2,3,4,5,6,7,8,9,10
COUNT DB ?
RES DB ? ; VARIABILE CHE CONTERRA' IL RISULTATO
ends
code segment
start:
MOV CX,LUNG
MOV SI,0;SI LO USO COME INDICE DI SCORRIMENTO
MOV BX,0;IN SI VADO A CONSERVARE LA SOMMA TOT TROVATA FINO AD ADESSO
MOV COUNT,0;CONTATORE DEGLI ELEMENTI SOMMATI
;INIZIO UN LOOP CHE DECREMENTANDO CX CONTINUERA' PER TUTTA LA LUNG DEL VETTORE
CICLO: CMP VETT[SI],0 ;CONFRONTO OGNI ELEMENTO CON 0
JNG CONT ; SE NON E' MAGGIORE VA A CONTINUA
INC COUNT;SE E' MAGG INCREMENTA IL CONTATORE
ADD BX,VETT[SI] ;AGGIUNGO A BX IL VALORE
CONT : ADD SI,2
LOOP CICLO
MOV AX,BX; SPOSTO IL RIS IN AX PERCHE' LA DIVISIONE SI PUO' FARE SOLO IN AX
DIV COUNT;DIVIDO LA SOMMA TOT CONTENUTA IN AX PER IL NUM DI ELEM SOMMATI
MOV RES,AL;IN AL C'E' LA PARTE PIU BASSA DEL RISULTATO DELLA DIVISIONE
;LA VARIABILE PUO' CONTENERE UN BYTE QUINDI HO UNA LIMITAZIONE NEL
;CARICARE IL RISULTATO
ADD BYTE PTR RES,30H
MOV AH,2
INT 21H
ends
end start