Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: do-while en 26 Agosto 2010, 02:30 am



Título: Dudas sobre convenciones y particularidades...
Publicado por: do-while en 26 Agosto 2010, 02:30 am
ˇBuenas a todos!

Viendo que mi anterior post parece ser demasiado general, empiezo por dudas concretas.

En el libro que estoy siguiendo en este momento no comentan nada sobre la devolucion de valores (de momento) por funciones, pero he visto que la mayor parte (sino, todas) de las funciones que se utilizan, devuelven los valores en registros. Entonces planteo lo siguiente. A mi me parece "demasiado trabajo", estar pusheando o popeando registros en la pila, porque determinada funcion requiera un registro concreto para devolver un valor, o porque otra funcion pueda cambiar de forma inesperada los valores de determinados registros. Me parece mucho mas comodo dejar al usuario de la funcion escoger el registro o posicion de memoria en el que quiere guardar dicho valor. Para ello devuelvo los valores en la pila, y el usuario decide cual es el registro que mas le conviene utilizar segun sus necesidades. Para ello hay que desplazar el punetro de pila antes de pushear los parametros, para poder guardar el valor (los valores) devuelto(s). Establecer un estandar sobre esto a estas alturas en la que existe tanto codigo ensamblador para muy diversas situaciones creo que seria absurdo, asi que supondre que no esxiste una opinion unificada. Pero lo que si querria saber, aun cuando haya poca portabilidad por parte del codigo que escriba, es si actualmente existe algun tipo de "convencion" generalizada sobre la devolucion de valores por parte de las funciones.

Otra cosa que me gustaria saber, es cuales de las palabras reservadas en ensamblador son especificas de MASM32, ya que aunque el codigo de por si sea muy poco portable, me gustaria poder ensamblar el codigo creado en la mayor parte de ensambladores posibles...

Esperando que mis dudas aporten aclaraciones a mas gente a parte de a mi, me despido con...

ˇUn saludo!


Título: Re: Dudas sobre convenciones y particularidades...
Publicado por: Eternal Idol en 26 Agosto 2010, 11:03 am
Se devuelve un solo valor y en EAX, este puede ser un puntero a una estructura si necesitas mas, asi de simple y concreto.

Busca el manual de MASM.


Título: Re: Dudas sobre convenciones y particularidades...
Publicado por: 08l00D en 27 Agosto 2010, 02:26 am
Lee sobre convenciones de llamadas o "calling conventions". El chiste en ensamblador es que vos te manejas como queres con las convenciones de llamadas, osea que vos si queres podes crear tu propia manera de manejar ya sea el paso de parametros, el valor de retorno, si restaura la pila la funcion o el codigo que la llamo, etc.
Si queres "portabilidad" palabra que con ensamblador suena un poco absurdo, podes usar la convencion de llamada mas popular o mas utilizada como cdecl o stdcall... igual vos fijate cuando programas una funcion tenes que tener el contexto donde se utilice esa funcion nunca vas a lograr 100 % de compatibilidad, por ejemplo si se utiliza tu funcion en un programa en C hay registros como edi y esi que tenes que tener en cuenta que no los podes usar y listo tenes que agregar al prologo y epilogo los push y pop para dejarlos como estan si los vas a usar...
en fin tenes q tener en cuenta varias cosas no vas a lograr portabilidad .. pero wee es ensamblador que queres.. jaja


Título: Re: Dudas sobre convenciones y particularidades...
Publicado por: do-while en 30 Agosto 2010, 01:30 am
ˇMuchas gracias por todo!

ˇUn saludo!