Instruccion CALL

Propósito:

Para llamar un subprograma de la lengua de la asamblea (o máquina).

Sintaxis:

CALL numvar[(variables)]

Comentarios:

numvar es el punto de partida en la memoria del subprograma que es llamado como compensación en el segmento actual.

las variables son las variables o las constantes, separadas por las comas e incluidas entre paréntesis, que deben ser pasadas a la rutina.

La declaración de CALL se recomienda para los programas de interconexión del lenguaje ensamblador con GW-BASIC. Aunque la función de USR puede también ser utilizada, la CALL es compatible con más idiomas, produce un código de fuente más legible, y puede pasar discusiones múltiples.

La invocación de la declaración de CALL hace ocurrir lo siguiente :


Nota

Las secuencias se pueden alterar por rutinas de usuario, pero su longitud no debe ser cambiada. GW-BASIC no puede borrar correctamente secuencias si sus longitudes son modificadas por rutinas externas.


Para más información sobre la declaración de CALL y la función de USR, vea el apéndice D en la guía del usuario de GW-BASIC.

 

Ejemplo 1:

100 DEF SEG=&H2000
110 ARK=0
120 CALL ARK(A, B$, C)
.
.

En línea 100 setea el segmento a la hex 2000. La ARK se fija a cero de modo que CALL a la ARK ejecute el subprograma en la localización 2000:0.

 

Ejemplo 2:

La secuencia siguiente del lenguaje ensamblador 8086 demuestra el acceso de los parámetros pasados y almacenados en C variable:

 

PUSH BP
MOV BP, SP      ; Gets current stack position in BP.
MOV BX, 8[BP]   ; Gets address of B$ descriptor.
MOV CL, [BX]    ; Gets length of B$ in CL.
MOV DX, 1[BX]   ; Gets address of B$ text in DX.
.
.
.
MOV SI, 10[BP] ; Gets address of A in SI.
MOV DI, 6[BP]   ; Gets pointer to C in DI.
MOVSW           ; Stores variable A in C.
RET 6           ; Restores stack and returns.

 

 

MOVSW copia solamente dos octetos. Esto es suficiente si las variables A y C son número entero. Cuatro octetos deben ser copiados si son sola precisión; ocho octetos, si son precisión doble.

 

Ejemplo 3:

100 DEF SEG=&H2000
110 ACC=&H7FA
120 CALL ACC(A, B$, C)
.
.
.

La línea 100 setea el segmento a hex 2000. El valor de la variable ACC se agrega en la dirección mientras que la palabra baja después de que el valor de DEF SEG se cambie de puesto cuatro bits a la izquierda (ésta es una función del microprocesador, no del GW-BASIC). Aquí, el ACC  se fija a &H7FA, de modo que la CALL al ACC ejecute el subprograma en la ubicacion hexadecimal 2000:7 FA (dirección absoluta hex  207FA ).

1