elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 02:33  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  suffix or operands invalid for add
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: suffix or operands invalid for add  (Leído 1,982 veces)
Leber


Desconectado Desconectado

Mensajes: 338


"Fracta, non verba"


Ver Perfil WWW
suffix or operands invalid for add
« en: 23 Marzo 2011, 14:26 »

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
.section .data
value:
.int 21, 15, 34, 11, 6, 50, 32, 80, 10, 2
output:
.asciz "The value is: %d\n"
.section .text
.globl _start
_start:
movl $9, %edi
loop:
pushl value(, %edi, 4)
pushl $output
call printf
add $8, $esp
dec %edi
jns loop
movl $1, %eax
movl $0, %ebx
int $0x80

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
signed.s: Assembler messages:
signed.s:12: Error: suffix or operands invalid for `push'
signed.s:13: Error: suffix or operands invalid for `push'
signed.s:15: Error: suffix or operands invalid for `add'
~/asm/jumps$

Pero si le digo al ensamblador que haga el codigo para 32 bits:

Código:
~/asm/jumps$ as --32 -o signed.o signed.s
signed.s: Assembler messages:
signed.s:15: Error: suffix or operands invalid for `add'
~/asm/jumps$

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



En línea

"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: suffix or operands invalid for add
« Respuesta #1 en: 23 Marzo 2011, 14:47 »

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?


En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Leber


Desconectado Desconectado

Mensajes: 338


"Fracta, non verba"


Ver Perfil WWW
Re: suffix or operands invalid for add
« Respuesta #2 en: 23 Marzo 2011, 16:20 »

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
« Última modificación: 23 Marzo 2011, 16:38 por Leber » En línea

"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.388


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: suffix or operands invalid for add
« Respuesta #3 en: 23 Marzo 2011, 17:27 »

http://en.wikipedia.org/wiki/X86_calling_conventions
En línea



La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Invalid boot.ini
Windows
[@] 3 1,646 Último mensaje 5 Noviembre 2004, 02:35
por ZaToR
invalid boot disckette
Windows
Erick_666 1 1,455 Último mensaje 29 Marzo 2005, 06:36
por el-brujo
Invalid Module Format
GNU/Linux
mordiskos 5 1,369 Último mensaje 1 Junio 2008, 20:29
por ^Tifa^
Invalid Window Handle - VB6 - Help me
Programación Visual Basic
Pendex 0 1,336 Último mensaje 28 Julio 2008, 00:35
por Pendex
Invalid partition Table.
Windows
OxIdAo 6 2,971 Último mensaje 9 Abril 2010, 00:41
por OxIdAo
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines