untio

Registrado: 17 Sep 2008 Mensajes: 380 Ubicación: MICA S.A.
| Publicado: 02/03/2014 8:01 am | | | Título: Sería posible hacer esto en una sola línea |
| Hola,
En primer lugar, gracias por leer este post.
Hoy me ha dado por experimentar con el ensamblador de gnu dentro de un sistema linux (concretamente ubuntu 14.10 como máquina virtual de VirtualBox).
El caso es que he empezado un programa. Por ahora lo único terminado es un procedimiento que escribe una cadena seguida de un entero de 32 bits que se le pasa como parámetro. Al procedimiento se le pasa el parámetro, pero para ello el procedimiento principal carga en eax la dirección del entero y después obtiene el contenido al que apunta ese puntero.
Mi duda es si se puede, y en caso afirmativo, como, pasar el entero directamente con algún tipo de indirección sin tener que usar el registro eax.
Aquí va el código:
| Código: | .data numero: .int 8180 cadena: .asciz "El número es: %d\n" .text .globl main
main: pushl %ebp movl %esp, %ebp
movl $numero, %eax /*La pregunta hace referencia a */ pushl (%eax) /* estas 2 líneas.*/ pushl $cadena call escribe addl $8, %esp /*Ya se que tal y como está el programa esta línea se podría quitar.*/ xorl %eax, %eax movl %ebp, %esp popl %ebp ret /*---------------------------------------------------------------------------*/ /* void escribe(int numero); numero: Es un número entero que es impreso después de la cadena "El número es: ". modifica: Nada. */ escribe: pushl %ebp movl %esp, %ebp pushl %eax pushl 12(%ebp) pushl $cadena call printf addl $8, %esp popl %eax movl %ebp, %esp popl %ebp ret /*----------------------------------------------------------------------------*/
|
Gracias por vuestro tiempo. _________________ Hago algo muy raro: primero leo las instrucciones. |
|