Obi Yann Posté(e) le 17 février 2008 Partager Posté(e) le 17 février 2008 Mon programme: .section .rodata .LC0: .string "%i\n" .text .globl main .type main, @function main: #création du cadre de pile pushl %ebp movl %esp,%ebp pushl %ecx subl $4, %esp #chargement de la valeur 6 dans eax et 5 dans ebx movl $6, %eax movl $5, %ebx #impression du contenu de eax sur l'écran movl %eax, 4(%esp) movl $.LC0, (%esp) call printf #impression du contenu de ebx sur l'écran movl %ebx, 4(%esp) movl $.LC0, (%esp) call printf #impression du contenu de eax sur l'écran movl %eax, 4(%esp) movl $.LC0, (%esp) call printf #fin du programme movl $0, %eax addl $4, %esp popl %ecx popl %ebp ret m'affiche ceci: yann@yann-laptop:/home/tp/Archi/Asm$ gcc exo3b.s -o exo3b yann@yann-laptop:/home/tp/Archi/Asm$ ./exo3b 6 5 2 yann@yann-laptop:/home/tp/Archi/Asm$ Je ne comprend pas pourquoi il m'affiche 2 et non 6, le contenu de %eax aurait été changé? par quoi? Je débute en assembleur, la solution est surement très bête, mais la je ne vois pas trop. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BreizFenrir Posté(e) le 18 février 2008 Partager Posté(e) le 18 février 2008 J'aimerais t'aider mais n'ayant fait que très peu d'assembleur (x86, 68k et ARM7) au cours de ma scolarité, quand bien même je vois le fonctionnement global de ton code, j'ai du mal à comprendre le fonctionnement précis des instructions. Tu pourrais rajouter quelques commentaires précisant l'objectifs poursuivi par certaines suites d'instructions ? C'est pas dit que quelqu'un pourra toujours aider après ça (enfin je pense qu'il y a tout de même quelques personnes qui touchent à l'assembleur de temps à autre), mais ça devrait tout de même rendre la résolution de ton problème plus facile. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Obi Yann Posté(e) le 18 février 2008 Auteur Partager Posté(e) le 18 février 2008 Voila, j'ai commenté Lien vers le commentaire Partager sur d’autres sites More sharing options...
JohnSmith Posté(e) le 18 février 2008 Partager Posté(e) le 18 février 2008 Bonjour, Je ne comprend pas pourquoi il m'affiche 2 et non 6, le contenu de %eax aurait été changé? par quoi? Parceque printf n'est pas de type void et retourne je ne sais plus quelle valeur dans %eax. Ce qui est la façon standard pour une fonction sous GCC de retourner une valeur jusqu'à 32 bits... Explications youhou ça y est j'ai ma première étoile (au bout de 3 ans 1/2)! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Obi Yann Posté(e) le 18 février 2008 Auteur Partager Posté(e) le 18 février 2008 Parfait, merci! Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 18 février 2008 Partager Posté(e) le 18 février 2008 Si ça ne te dérange pas : Lien vers le commentaire Partager sur d’autres sites More sharing options...
Obi Yann Posté(e) le 19 février 2008 Auteur Partager Posté(e) le 19 février 2008 Voila Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.