Problème de comparaison nombre [ASM-Nasm] - ASM - Programmation
Marsh Posté le 11-02-2009 à 11:51:01
Ne faudrait-il pas prendre la valeur absolue au lieu de multiplier par -1 ?
Marsh Posté le 11-02-2009 à 11:52:48
bah la multiplication par -1 ce n'est pas faire la valeur absolu d'un nombre négatif?
En fait ce que je comprend pas, c'est que dans EAX, mon nombre après le SUB, augmente non-stop.
Par exemple j'ai -5748 et -4. L'intervalle est de 5744, ok?
Mais par après j'ai -4 et 0. J'ai donc un intervalle de 4, ok?
Alors pourquoi cette intervalle n'est pas de 4, mais est supérieur à 5744?
Marsh Posté le 11-02-2009 à 11:56:18
Sauf erreur, avec les données de l'exemple, on a EAX=-87, EBX=587. Puis EAX=587--87=674. Puis multiplication par -1 (?) ce qui donne -674 qui est comparé avec 0.
Marsh Posté le 11-02-2009 à 11:57:57
Arf j'ai oublié de dire que le tableau a été trié au part avant, donc les nombres sont dans l'ordre et j'ai bien que des nombres negatif lors du sub.
Marsh Posté le 11-02-2009 à 12:07:39
Donc, le tableau est
table DD -8762, -87,0, 1, 20, 1587,6874
(-87--8762)*-1 = -8575
puis la comparaison avec 0 donne 0 vainqueur.
Je crois qu'il faudrait initialiser CX à -4000, et je crois qu'il serait plus simple de prendre la valeur absolue avec quelque chose comme
boucle4: |
Marsh Posté le 11-02-2009 à 15:54:33
quelle est le but de comparé EAX avec... lui même? on aura toujours le même résultat..
Marsh Posté le 11-02-2009 à 16:16:58
Le but est de positionner les flags, notamment le flag "S", pour savoir si le nombre est négatif. Mais je me suis peut-être trompé, et il vaut peut-être mieux utiliser l'instruction test que cmp ici.
Quoi qu'il en soit, il est encore plus simple de ne pas mettre ce cmp ou ce test car le sub met déjà à jour les flags.
Marsh Posté le 11-02-2009 à 16:26:26
Le problème avec ça, c'est que ça rend faux le plus petit, et pareille pour le plus grand, il y a une inversion de valeur (donc le plus grand est à 0, et le plus petit à -60000), mais le truc c'est que c'est impossible d'une part et d'autre part, valeur inversé
Marsh Posté le 12-02-2009 à 09:32:58
Bon j'ai trouvé mes erreurs après une bonne nuit de sommeils
Cela venait du fait que ma loop loopait bien sur le nombre d'élément du tableau, mais mon pointeur dans EDI, lui, n'avançait pas à cause du simple fait que je ne l'incrémentait pas..
Comme quoi, a trop vouloir cherché on a du mal
Merci à toi olivthill pour m'avoir conseillé
Marsh Posté le 11-02-2009 à 11:29:09
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 :
Voici mon .data :
Merci d'avance pour votre aide
---------------
私輪ジョアシェン