SyaoranLi | Bonjour, j'ai un petit soucis dans un tableau de nombres signés.
Je cherche à connaître le plus grand intervalle et le plus petit intervalle entre deux nombres consécutifs.
Seulement, pour le plus petit nombre, il me retourne la bonne valeur, et pour le plus grand il me fait la différence entre les deux extrême.. je ne comprends plus rien et je me casse le cul dessus depuis 4 heures Voici le code :
Code :
- mov ECX,0 ; plus grand ecart
- mov EDX,40000 ; plus petit ecart
- mov ESI,table ; adresse de debut de table dans ESI
- boucle3:
- mov EDI,ESI ; Copie du tableau
- add EDI,4 ; Element suivant
- boucle4:
- mov EAX,[ESI] ; Element actuel d'ESI
- mov EBX,[EDI] ; Element actuel d'EDI
- push EDX ; Sauvegarde d'EDX parce qu'il va se faire modifié par imul
- sub EAX,EBX ; On regarde l'écart entre les deux
- mov EBX,-1 ; On multiplie par -1 car on aura toujours une valeur neg.
- imul EBX ; Multiplication..
- pop EDX ; On restaure EDX pour après
- cmp EAX,ECX ; On compare pour savoir le plus grand
- ; si eax plus grand alors ecx = eax
- jnl plusgrand
- cmp EAX,EDX ; On compare pour savoir le plus petit
- ; si eax plus petit alors edx = eax
- jng pluspetit
- jmp suite ; on continue vers suite
- plusgrand:
- mov ECX,EAX
- jmp suite
- pluspetit:
- mov EDX,EAX
- jmp suite
- suite:
- add EDI,4 ; On augmente de 4 pour l'element suivant dans EDI
- cmp EDI,taille ; On vérifie qu'on ne sort pas du tableau
- jb boucle4 ; On ne dépasse pas donc on retourne à boucle4
- add ESI,4 ; On augmente de 4 pour l'element suivant dans ESI
- cmp ESI,taille-4 ; On vérifie qu'on ne sort pas du tableau
- jb boucle3 ; On ne dépasse pas donc on retourne à boucle3
|
Voici mon .data :
Code :
- section .data
- table DD -87,587,6874,-8762,20,1,0
- taille DD taille-table
|
Merci d'avance pour votre aide ---------------
私輪ジョアシェン
|