PDA

View Full Version : [asm] somma


DarkSiDE
14-12-2003, 12:43
nella speranza che ci sia qualche anima pia che capisca qualcosa di asm 8086 vi posto il mio problema:

ho un vettore:

vettore db 0F1h, 03Bh, 052h, 07Eh, 096h;

devo fare la somma di tutti gli elementi, e dividirla per il loro numero (8), avevo pensanto a un qualcosa del tipo:

mov si,4h ;contatore
xor ax,ax

som: add al,vettore[si]
dec si
cmp si,0
jne som
mov bl,08h
div bl

il problema è che, ovviamente, quando sommo perdo il riporto
inizialmente avevo pensato a una somma a 16 bit, add ax,vettore[si] il problema è che invece di sommare mi scriveil primo elemento nella parte bassa, il primo nella parte alta e poi inizia a sommare :confused: :confused:

okay
14-12-2003, 13:55
Per il riporto usa adc e non add...........

ciao

DarkSiDE
14-12-2003, 14:05
Originariamente inviato da okay
Per il riporto usa adc e non add...........

ciao

sì lo so ma il carry mi dice solo se c'è il riporto nn mi dice quant'è

okay
14-12-2003, 15:38
devi lavorare con registrpo a 16 bit ax
......
il totale della somma di al è 532, ma al può contenere al massimo 255, per questo fai overfloow 2 volte, il ltoale dopo la divisione con al, ti considera:
20/8 = 2.5..... (ovvero 2, in quanto naturalmente non considera la virgola)

quindi 532-512 = 20 (risultato di al dopo i due overfloow)
...quindi devi usare adc per ricordare il riporto e ax e bx a 16 bit per avere il numero sotto 65535


ciao

DarkSiDE
14-12-2003, 16:07
Originariamente inviato da okay
devi lavorare con registrpo a 16 bit ax
......
il totale della somma di al è 532, ma al può contenere al massimo 255, per questo fai overfloow 2 volte, il ltoale dopo la divisione con al, ti considera:
20/8 = 2.5..... (ovvero 2, in quanto naturalmente non considera la virgola)

quindi 532-512 = 20 (risultato di al dopo i due overfloow)
...quindi devi usare adc per ricordare il riporto e ax e bx a 16 bit per avere il numero sotto 65535


ciao

più semplicemente si può fare così:

add al,vettore[bx]
adc ah,0

;)