Ayuda con compilación en 64 bits de ensamblador

Imagen de gorlian
0 puntos

Estoy haciendo un programa en ensamblador y a la hora de compilar me parecen los siguientes errores:

sesion8_ej1.s:8: Error: suffix or operands invalid for `push'
sesion8_ej1.s:13: Error: suffix or operands invalid for `push'
sesion8_ej1.s:27: Error: suffix or operands invalid for `pop'
sesion8_ej1.s:29: Error: suffix or operands invalid for `pop'

He buscado por todas partes y he llegado a la conclusión de que ésto pasa porque trabajo a 64 bits pero no se cómo solucionarlo...

El programa utiliza un archivo en lenguaje C y el ensamblador como subrutina externa.

main()
{ int res;

res=factorial (3);
printf("Factorial(3)= %d\n", res);
res=factorial (5);
printf("Factorial(5)= %d\n", res);
res=factorial (6);
printf("Factorial(6)= %d\n", res);
}

/*int factorial (int n)
{
int factorial=1, i;

for(i=n;i>0;i--)
factorial=factorial * i;

return(factorial);
}
*/

.global factorial

factorial:

#Crear enlace dinámico
pushl %ebp
movl %esp, %ebp
#Reservar espacio variables locales
subl $4, %esp
#Salvar registros
pushl %edi

#Código subrutina

movl $0, %edi

for:
cmpl $0, %edi
jle end

imull -4(%ebp)
decl %edi

end:
popl %edi
movl %ebp, %esp
popl %ebp
ret

Saludos.