Name:
Location: Tijuana, Baja California N., Mexico

Soy un estudiante de Informatica en el TECNOLOGICO DE TIJUANA, y que trato de terminar mi carrera para poder hacer un profecionista exitoso. Pero lo mas Importante trato de ser un buen amigo aunque aveces me paso con la carrilla.

Google

Thursday, September 08, 2005

7.2. LLAMADA DE PROCEDIMIENTOS.

Hasta ahora los segmentos de código han consistido solo en un procedimiento, codificado como:

BEGIN PROC FAR
.
.
.
BEGIN ENDP


En este caso el operador FAR informa al sistema que la dirección indicada es el punto de entrada para la ejecución del programa, mientras que la directiva ENDP define el final del procedimiento. Sin embargo, un segmento de código puede tener cualquier numero de procedimientos, todos distinguidos por PROC y ENDP. Un procedimiento llamado (o subrutina) es una sección de código que realiza una tarea definida y clara (tal como ubicar el cursor o bien obtener entrada del teclado).

La organización de un programa en procedimientos proporciona los beneficios siguientes:

1. Reduce la cantidad de código, ya que un procedimiento común puede ser llamado desde cualquier lugar en el segmento de código.

2. Fortalece la mejor organización del programa.

3. Facilita la depuración del programa, ya que los errores pueden ser aislados con mayor claridad.

4. Ayuda en el mantenimiento progresivo de programas, ya que los procedimientos son identificados de forma rápida para su modificación.

Operaciones CALL y RET

La instrucción CALL transfiere el control a un procedimiento llamado, y la instrucción RET regresa del procedimiento llamado al procedimiento original que hizo la llamada. RET debe ser la ultima instrucción en un procedimiento llamado. Los formatos generales para CALL y RET son:





El código objeto particular que CALL y RET generan depende de si la operación implica un procedimiento NEAR (cercano) o un procedimiento FAR (lejano).

Llamada y regreso cercanos. Una llamada (CALL) a un procedimiento dentro del mismo segmento es cercana y realiza lo siguiente:

  • Disminuye el SP en 2 (una palabra)
  • Mete el IP (que contiene el desplazamiento de la instrucción que sigue al CALL) en la pila.
  • Inserta la dirección del desplazamiento del procedimiento llamado en el IP (esta operación vacía el resultado de la instrucción previamente procesada),
Un RET que regresa desde un procedimiento cercano realiza lo siguiente:
  • Saca el antiguo valor de IP de la pila y lo envía al IP (lo cual también vacía el resultado de la instrucción previamente procesada).
  • Incrementa el SP en 2.
Ahora el CS:IP apunta a la instrucción que sigue al CALL original en la llamada del procedimiento, en donde se reasume la ejecución. Llamada y regreso lejanos. Una llamada (CALL) lejana llama a un procedimiento etiquetado con FAR, tal vez en un segmento de código separado. Un CALL lejano mete a la pila al CS y al IP, y RET los saca de la pila.
page 60,132
TITLE P08CALLP (EXE) Llamada a procedimientos
.MODEL SMALL
.STACK 64
.DATA
;---------------------------------------------------------------------
.CODE
BEGIN PROC FAR
CALL B10 ;Llama a B10
; ...
MOV AX,4C00H ;Salida a DOS
INT 21H
BEGIN ENDP
;---------------------------------------------------------------------
B10 PROC NEAR
CALL C10 ;Llama a C10
; ...
RET ;De regreso
B10 ENDP ;Quien llama
;---------------------------------------------------------------------
END BEGIN

0 Comments:

Post a Comment

<< Home