Ciao a tutti, avevo un programmino in assembler che ho provato a risolvere però mi rimane qualche dubbio in quanto provando a fare il debug non capisco perchè non esca quanto dovuto!
Il programma richiede di considerare un vettore di word di 10 elementi e di fare la media degli elementi che sono compresi(uguali) tra MIN e MAX.
Avendo come elementi del vettore i seguenti:
codice:
-8, 10, 28, 32, -40, -156, 2000, 0, 100, -10
e come MIN: -10 e MAX: 10 si devono considerare solo:
codice:
-8, 10, 0 -10
A questo punto facendo la somma viene -8 e diviso 4(elementi validi):
MEDIA = -2.
Il fatto è che facendo il debug con emu86, guardando cosa c'è in media alla fine del programma mi da 16382..che se vogliamo essere precisi dovrebbe essere corretto perchè sarebbe 2 in complemento a due!! però facendo vedere media come variabile signed, dovrebbe far vedere -2 no 16382!!!
grazie mille per le spiegazioni

Posto il codice qua sotto:
codice:
dim equ 10

.model small
.stack
.data

vet   dw -8, 10, 28, 32, -40, -156, 2000, 0, 100, -10
maxt  dw 10
mint  dw -10          
somma dd  0
media dw  ?

.code
.startup   

mov cx, dim 
mov bx, 0
mov di, 0

ciclo: mov ax, vet[di]
       cmp ax, mint
       jl next
       cmp ax, maxt
       jg next
       add word ptr   somma, ax  
       adc word ptr+2 somma, 0
       inc bx
       next: add di, 2
     loop ciclo

mov ax, word ptr somma
mov dx, word ptr somma+2
idiv bx
mov media, ax

.exit 
end