Addition d'entier

rhumsek Messages postés 17 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 5 novembre 2011 - 12 juil. 2004 à 07:18
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 12 juil. 2004 à 21:46
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juil. 2004 à 09:12
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
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 juil. 2004 à 12:16
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

@++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 juil. 2004 à 16:58
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++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 juil. 2004 à 21:46
Cool, j'etais pas trop loins, alors ;)
0
Rejoignez-nous