Aller au contenu

[résolu]Assembleur, comprend pas un truc.


Obi Yann

Messages recommandés

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. :craint:

Lien vers le commentaire
Partager sur d’autres sites

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...