jueves, 7 de marzo de 2013

Llamada a procedimientos/funciónes/rutinas en ensamblador

        Al llamar a un procedimiento, no deben pasarse los parámetros por medio de los registros, sino por medio de la pila. Por su condición, deben ponerse los parámetros en orden inverso de tal manera que en la función se tomen en el orden correcto (ascendente).

        La siguiente función en C, será ejemplo de este post:



fun (par1, par2, par3);

        Lo que en asm de intel con su propia sintaxis, sería lo siguiente:

MOV AX,PAR3
PUSH AX
MOV AX,PAR2
PUSH AX
MOV AX,PAR1
PUSH AX
CALL fun



        En el ejemplo, al llegar a la función llamada, la pila contendría lo siguiente:


        Para tomar los parámetros en la función, no debe utilizarse el puntero de pila (SP) por los siguientes motivos: Es un puntero dinámico, y por esta razón cambia sin que nos diga; por no estar diseñado para este propósito; por ser automático; es implícito su manejo.

        Por las razones anteriores, en lugar del puntero de pila (SP), se utiliza el puntero base (BP), el cual se diseñó para reemplazar a SP.
        La idea central es utilizar el puntero base para obtener los valores de la pila sin modificar el puntero de pila, es decir, sin utilizar las intrucciónes PUSH y POP ni modificar a mano a SP.
    
        La copia de BP a SP es algo así como obtener una imágen de la pila en ese momento. BP sería una referencia a los parámetros obtenidos. Siempre y cuando el valor del puntero de pila no se modifique, se podrá utilizar el puntero base sin problemas.

        En la copia anterior, el valor del puntero base se sobreescribiría con el valor del puntero de pila causando errores en llamados a procedimientos anidados. Para resolver el anterior problema y el actual, las siguientes intrucciónes serían entonces las ideales al comienzo de la subrutina:

PUSH BP
MOV BP,SP
...
POP BP

        Y la pila en procedimientos que incluyen las intrucciónes de arriba quedaría algo como lo siguiente:


0 comentarios:

Publicar un comentario

Dejanos tu comentario

 
Web Analytics