Sobre paso de parámetros y retorno de funciones

Iniciado por ivancea96, 12 Agosto 2014, 17:06 PM

0 Miembros y 4 Visitantes están viendo este tema.

ivancea96

Hola :D

¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Yo veo más sencillo pasar parámetros con un registro, así asegurarse de que la pila no cambia. Pero no se que es lo más "normal".

Por ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Algunas dudillas que me quedaron al programar ASM xD

Eternal Idol

#1
Para depurar la pila sin duda, cuando se usan registros cada funcion los va sobreescribiendo y analizar un dump es doloroso.

Lo normal hoy en dia es usar registros, es la convencion de llamada stdcall en x64 y (el Kernel) Linux tambien usa registros. Igual son limitados, al final terminas usando la pila ...

Eso depende de la convencion de llamada, la de C limpia la pila el llamador despues de llamar, en stdcall el llamado pero eso se hace justo al retornar con retn (no es que se quiten los valores, simplemente se ajusta el puntero ESP). Ambas casos los podes analizar creando un sencillo programa en C que llame a la API de Windows y a printf por ejemplo.
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

cpu2

Citar¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Veo mejor usar registros, a eso se le llama sistema "fastcall". El motivo ya lo dice el nombre, trabajar con los registros es mejor que con la pila.

CitarPor ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Si haces un disassembler veras que cargan directamente los valores en la pila, luego la funcion llamada los lee, normalmente suelen limpiarla o dejarla como antes, pero pierdes optimizacion, por eso es mejor usar registros, desde este punto de vista.

Un saludo.

daryo

preguntas por curiosidad o por un caso en especifico?

Citar¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?
pues como todo depende pero por ejemplo la api de windows usa la pila si vas a hacer un messagebox harias:

Código (asm) [Seleccionar]
push ultimoparametro
push penultimo
push mensaje
push primero
call messagebox

Citar¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

cuando lees un valor de la pila  con
Código (asm) [Seleccionar]
pop lo estas sacando. imagina la pila como poner objetos uno encima de otro el primero que sacas es el ultimo que pusiste


buenas

Eternal Idol

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

ivancea96

Cita de: daryo en 12 Agosto 2014, 17:36 PM
cuando lees un valor de la pila  con
Código (asm) [Seleccionar]
pop lo estas sacando. imagina la pila como poner objetos uno encima de otro el primero que sacas es el ultimo que pusiste

Recuerda que también se puede leer la pila sin POP.

Gracias por las respuestas :D Estaba yo haciendome una librería, y no sabía si dejar el tema de llamadas con registros, o cambiarlo a la pila. Pero la verdad, los registros me parecen más sencillos jaja

Eternal Idol

Cita de: ivancea96 en 12 Agosto 2014, 19:21 PMGracias por las respuestas :D Estaba yo haciendome una librería, y no sabía si dejar el tema de llamadas con registros, o cambiarlo a la pila. Pero la verdad, los registros me parecen más sencillos jaja

Si, pero ojo que los registros son finitos y si las funciones tienen muchos parametros tenes que recurrir a la pila igual; sino usa punteros a estructuras para pasar los parametros ... que normalmente terminan siendo variables locales en la pila tambien  ;D
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