Addition d'entier

Signaler
Messages postés
17
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
5 novembre 2011
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
bonjour
voici un programme qui doit additionné les nombres d'un tableau, celui doit afficher comme résultat 1500 mais il affiche 1600, pouvez vous m'aider à le résoudre??
TITLE sommeint
;somme d'un tableau d'entiers
INCLUDE Irvine32.inc
.386
.MODEL flat,stdcall
.STACK 4096
ExitProcess PROTO,dwExitCode:DWORD
DumpRegs PROTO

PDWORD TYPEDEF PTR DWORD
;pointeur sur mot
.data
tablo DWORD 200h,400h,600h,800h,100h

;créations d'instances (variables pointeurs)
ptr1 DWORD tablo

.code
main PROC

mov edi,OFFSET tablo
mov ecx,LENGTHOF tablo
mov eax,0; ax=0
call dumpregs
mov edi,ptr1
mov eax,[edi]

L1:

add eax,[edi+4]
call dumpregs ; affiche?
loop L1

call dumpregs ;affiche?

exit
main ENDP
END main

rhumsek

4 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
je n'ai pas le fichier 'Irvine32.inc' qui doit inclure, je pense "dumpregs"...

que fais cette fonction, en fait ?

Je suis un parfait débutant, mais je pense à :
mov ebx,OFFSET tablo
mov ecx,LENGTHOF tablo
mov eax,0

@@:
add eax,[ebx]  ;on ajoute le nombre pointé par ebx
add ebx, 4       ;on décale le pointeur
dec ecx            ; on décrémente le compteur
jnz @B
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

edi n'est pas incrémenté dans ta boucle donc, tu ajoute ecx fois [edi+4] a eax
ton resultat donne: eax = 200h + (400h * ecx)

essai cela:
xor eax,eax
lea edi,tablo
mov ecx,LENGTHOF tablo
@L1:
add eax,[edi+ecx*4-4]
loop @L1

@++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Salut,

loop tout comme les anciennes instructions de chaines et bouclage (rep ...) sont a considerer comme obsoletes depuis le 486.
Il faut y preferer un couple 'dec jnz' par exemple qui offrira de bien meilleures performances.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Cool, j'etais pas trop loins, alors ;)