Título: suffix or operands invalid for add Publicado por: Leber en 23 Marzo 2011, 14:26 pm Hola, que tal.
Estaba haciendo un ejemplo del libro que me estoy leyendo sobre asm, cuyo codigo es: Código: # signtest.s - An example of using the sign flag El problema esta que mi cpu es de 64 bits, y creo que el codigo este es para 32 bits. (segun lei push y pop ya no se usan en 64 bits, es cierto?) Si lo compilo tal cual: Código: ~/asm/jumps$ as -o signed.o signed.s Pero si le digo al ensamblador que haga el codigo para 32 bits: Código: ~/asm/jumps$ as --32 -o signed.o signed.s No dice nada de los push, pero se queja de la instrucción add. No es correcta esa instruccion en 32 bits? O me falta indicarle si estoy moviendo 8 bits, 16 o 32? Por otro lado, otra duda que tengo, es que si en lugar de decirle al push que estoy moviendo 32 btis, le digo que mueva 64 con pushq, tampoco se queja de los push. Igualmente usar pushq no seria correcto ya que estoy moviendo un entero, y este ocupa 4 bytes. Gracias de antemano Título: Re: suffix or operands invalid for add Publicado por: Eternal Idol en 23 Marzo 2011, 14:47 pm En x64 los parametros no se pasan en la pila salvo que no sean suficientes los registros:
http://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI_convention Lo del add no se ... ¿Probaste con un S.O. de 32 bits? Título: Re: suffix or operands invalid for add Publicado por: Leber en 23 Marzo 2011, 16:20 pm Eternal Idol, gracias por responder.
[EDITO] Fue fallo mio: Código: add $8, $esp en AT&T los registros se "declaran" con "%". Siento las molestias Una duda que me ha surgido es, no se si estoy en lo correcto, quiza este diciendo una barbaridad. En 32bits, cuando tu llamas a una funcion pasas los parametros que tendra(si tiene), llamas a la funcion y luego se mete el "ret" en la pila para que sepa donde volver una vez acabada la funcion. Luego dentro de la funcion, si esta tiene variables locales, se reserva mas espacio en la pila, y se meten dichos parametros. Creo que era asi. Entonces, en x64, no se usa la pila para tales cosas? Es decir, si cuando llamas a una funcion los parametros se pasan en los registros, lo unico que se mete en la pila es el "ret" y las variables locales? Gracias, y saludos Título: Re: suffix or operands invalid for add Publicado por: Eternal Idol en 23 Marzo 2011, 17:27 pm http://en.wikipedia.org/wiki/X86_calling_conventions
|