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:
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