viernes, 25 de enero de 2008

Ensamblador (Entrega 5)

Implementación de Procedimientos

En términos muy groseros, un PROCEDIMIENTO es simplemente una dirección de la memoria que contiene una secuencia de instrucciones y termina con una instrucción RET. A partir de este punto, comienzan a aparecer “detalles”, tales como los PARAMETROS, el mantenimiento de los REGISTROS y BANDERAS en la “PILA” o “STACK”, el mantenimiento de VARIABLES en la pila, el retorno de valores (para implementar las funciones), etcétera. Todas estas cuestiones son importantes al implementar compiladores ya que en los lenguajes de alto nivel, se toman en cuenta minuciosamente.


Fig. 1 Implementación de un “procedimiento” en assembler

En la Fig. 1 observamos el código de un procedimiento que comienza en la línea 108 y que consiste de una rutina que permite mostrar un carácter por la pantalla, es el código que vemos a continuación:

0DE3:0108 MOV AH,2
0DE3:010A MOV DL,31
0DE3:010C INT 21
0DE3:010F RET


El “Programa Principal” es el siguiente:

0DE3:0100 CALL 108
0DE3:0103 MOV AX,4C
0DE3:0106 INT 21


Como vemos, el “programa” completo no es mucho mas que esto, ya que lo único adicional es que tiene las instrucciones de “salida” de DOS. Sin embargo, muestra dos conceptos importantes:

1) El procedimiento es simplemente una DIRECCION de memoria.

2) La instrucción RET devuelve el puntero de instrucciones, o, en términos simples, el control del programa a la instrucción siguiente a la del llamado.

En este ejemplo, el LLAMADO del procedimiento se realiza en la dirección 100 y el RETORNO se produce en la dirección 103.

El Programa en Ejecución

Fig. 2 El Programa y la Subrutina en acción

Observen la Fig. 2:

1) El programa muestra la ejecución de la primera instrucción que es la llamada al procedimiento (CALL 108).

2) Luego aparece un 1 en la pantalla que es lo que imprimió la subrutina. En este punto, es interesante notar que el IP = 103 (puntero de instrucciones) esta dirección es la del retorno del procedimiento.

3) Desde la dirección 103 el programa TERMINA

¡Esto es todo por ahora!


Sergio Otaño


0 comentarios: