PDA

View Full Version : [ASSEMBLY] - Somma e vettori


Zero_Tolerance
25-02-2007, 15:16
Ciao a tutti!
Qualcuno sa dirmi se il programma (anzi, la parte di programma) postato qui sotto potrebbe funzionare?

SOMMARE I VALORI PRESENTI ALL'INTERNO DI UN VETTORE. I VALORI SONO DI TIPO WORD

#########################

vett1 dw 3,9,4,2,6,4
mov ax,0
mov cx,6 ; e' il contatore delle operazioni
mov si,offset vett1
again: add ax,word ptr[si]
inc si
loop again

#########################

Tuttavia, mi è stato detto di utilizzare anche il comando ADC, perchè si utilizza la flag di carry?

Grazie a tutti per l'aiuto!!

repne scasb
25-02-2007, 15:23
Ciao a tutti!
Qualcuno sa dirmi se il programma (anzi, la parte di programma) postato qui sotto potrebbe funzionare?

SOMMARE I VALORI PRESENTI ALL'INTERNO DI UN VETTORE. I VALORI SONO DI TIPO WORD

#########################

vett1 dw 3,9,4,2,6,4
mov ax,0
mov cx,6 ; e' il contatore delle operazioni
mov si,offset vett1
again: add ax,word ptr[si]
inc si
loop again

#########################

Tuttavia, mi è stato detto di utilizzare anche il comando ADC, perchè si utilizza la flag di carry?

Grazie a tutti per l'aiuto!!

Sostituisci: "inc si" con "add si,2".

Zero_Tolerance
25-02-2007, 15:33
Ehm.. come mai?

Zero_Tolerance
25-02-2007, 15:40
Questo e' tutto il sorgente:

;--------------------------funzione ---------------------------
;
stac segment para stack 'stack'
db 128 dup (' ')
stac ends
;
dati segment para public 'data'
;
vett1 dw 3,9,4,2,6,4
dim dw 6
dati ends
;
codice segment para public 'codice'
;
start proc far
assume cs:codice,ds:dati,ss:stac,es:nothing
;-----------------save ds del dos------------------------,
;
push ds
mov ax,0
push ax
;
;-----------------setting ds ed es-----------------------
;
mov ax,dati
mov ds,ax
mov es,ax
;
;------------------per le movs--------------------------
;
cld
;
;


mov ax,0
mov cx,6 ; e' il contatore delle operazioni
mov si,offset vett1
again: add ax,word ptr[si]
add si,2
loop again
fine: ret
start endp
codice ends
end start

Questo e' il report del Turbo Debugger:

Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

Assembling file: compito.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 406k


Però non mi crea l'eseguibile!

repne scasb
25-02-2007, 15:56
Ehm.. come mai?

Il tuo vettore ha elementi costituiti da "word", ossia 2 byte. Per passare da un elmento ad un altro devi incrementare 'si' di 2 byte (1 word), e non di 1 byte.

Zero_Tolerance
25-02-2007, 16:05
Ma.. inc si non è per puntare al valore successivo del vettore?
All'inizio c'è mov si,offset vett1.

andbin
26-02-2007, 08:49
Ma.. inc si non è per puntare al valore successivo del vettore?Al byte successivo! Quindi è corretto fare add si,2.
Per la questione del ADC ... non credo che ti serva. ADC somma anche il carry. Ma serve in genere per fare somme a "precisione multipla". Se devi solo fare una somma pedestre di numeri, non ha senso sommare anche il carry.