Section courante

A propos

Section administrative du site

CALL

Appel un sous-programme
GWBASIC

Syntaxe

CALL nomdevariable[(listedarguments)]

Paramètres

Nom Description
nomdevariable Ce paramètre permet d'indiquer la variable contenant l'adresse d'appel du sous-programme
listedarguments Ce paramètre permet d'indiquer les paramètres d'appel du sous-programme

Description

Cette commande appel une procédure, lequel est écrit en langage machine.

Algorithme

MODULE CALL(adresse, paramètres...)
   SI adresse est invalide ALORS
      Afficher une erreur "Adresse non valide"
      RETOURNE
   FIN SI

   SI des paramètres sont fournis ALORS
      Préparer les paramètres pour la routine appelée (par exemple, stocker dans des registres ou en mémoire)
   FIN SI

   Transférer le contrôle à l'adresse spécifiée
   Exécuter les instructions de la procédure ou de la routine externe

   Lorsque la procédure se termine:
      Reprendre l'exécution du programme principal

Remarques

Exemples

Dans l'exemple suivant, la ligne 100 définit le segment sur l'hexadécimal 2000. ARCH est défini sur zéro afin que l'appel à ARCH exécute le sous-programme à l'emplacement 2000:0 :

  1. 100 DEF SEG=&H2000
  2. 110 ARCH=0
  3. 120 CALL ARCH(A, B$, C)
  4. .
  5. .
  6. .

Dans cette exemple, la séquence suivante du langage d'assembleur 8086 illustre l'accès aux paramètres passés et entreposés dans la variable C :

  1. PUSH BP
  2. MOV BP, SP      ; Obtient la position actuelle de la pile dans BP.
  3. MOV BX, 8[BP]   ; Obtient l'adresse du descripteur B$.
  4. MOV CL, [BX]    ; Obtient la longueur de B$ en CL.
  5. MOV DX, 1[BX]   ; Obtient l'adresse du texte B$ dans DX.
  6. .
  7. .
  8. .
  9. MOV SI, 10[BP]  ; Obtient l'adresse de A dans SI.
  10. MOV DI, 6[BP]   ; Obtient le pointeur vers C dans DI.
  11. MOVSW           ; Entrepose la variable A dans C.
  12. RET 6           ; Restaure la pile et les retours.

MOVSW ne copie que deux octets. Ceci est suffisant si les variables A et C sont entières. Quatre octets doivent être copiés s'ils sont en simple précision ; huit octets, s'ils sont en double précision.

Dans cet exemple, la ligne 100 définit le segment sur 2000 hexadécimal. La valeur de la variable ACC est ajoutée à l'adresse en tant que mot bas après que la valeur DEF SEG est décalée de quatre bits vers la gauche (c'est une fonction du microprocesseur, pas de GW-BASIC) . Ici, ACC est défini sur &H7FA, de sorte que l'appel à ACC exécute le sous-programme à l'hexadécimal d'emplacement 2000:7FA (hexadécimal d'adresse absolue 207FA) :

  1. 100 DEF SEG=&H2000
  2. 110 ACC=&H7FA
  3. 120 CALL ACC(A, B$, C)
  4. .
  5. .
  6. .


Dernière mise à jour : Lundi, le 19 janvier 2015