/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Sería posible hacer esto en una sola línea

 
      Índice del Foro elrincondelc.com -> Otros lenguajes
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
untio



Registrado: 17 Sep 2008
Mensajes: 380
Ubicación: MICA S.A.

MensajePublicado: 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.
Volver arriba
      Índice del Foro elrincondelc.com -> Otros lenguajes
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com