Instruction non valide suffixe pour pousser lors de l'assemblage avec le gaz
Lors de l'assemblage d'un fichier avec l'assembleur GNU j'obtiens l'erreur suivante:
bonjour.s:6: Erreur: invalid instruction suffixe "push"
Voici le fichier que je suis en train d'assembler:
.text
LC0:
.ascii "Hello, world! .text
LC0:
.ascii "Hello, world!\12\0"
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $LC0, (%esp)
call _printf
movl $0, %eax
leave
ret
"
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
call __alloca
call ___main
movl $LC0, (%esp)
call _printf
movl $0, %eax
leave
ret
Quel est le problème et comment puis-je résoudre ce problème?
Le problème est lié à cette question bien que les erreurs et les instructions en question sont différentes.
- double possible de x86 Assemblée pushl/popl ne fonctionne pas
Vous devez vous connecter pour publier un commentaire.
64bit instructions
Par défaut, la plupart des opérations de rester 32 bits et 64 bits homologues sont invoquées par le quatrième bit dans le REX préfixe. Cela signifie que chacune des 32 bits de l'instruction a, il est naturel extension 64 bits et que l'étendue des registres sont gratuit pour 64 bits instructions
Ajouter
.code32
que votre première ligne.--32
option pour changer la cible de 32 bits plate-forme.Êtes-vous d'assemblage avec une version 64 bits de l'assembleur? Votre code ressemble à 32 bits. J'ai cette erreur avec votre code lorsque vous utilisez une version 64 bits de l'assembleur:
Mais il fonctionne très bien avec une version 32 bits de l'assembleur.
Vous devez utiliser un "64 bits syntaxe", ou vous pouvez utiliser le bouton "--32 " option: par ce moyen, l'assembleur changements de sa cible pour la plate-forme i386.