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

Dudas y comentarios sobre otros lenguajes de programación. Si algún lenguaje recibe suficientes preguntas le añadimos nueva categoría.
Responder
Mensaje
Autor
Avatar de Usuario
untio
Mensajes: 389
Registrado: 17/09/2008 9:35 am
Ubicación: Provincia de Almería
Contactar:

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

#1 Mensaje por untio » 02/03/2014 8:01 am

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: Seleccionar todo

	.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.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado