CODINGLA BIBLE DU CPC 6128

La Bible du CPC 6128 - 3.03.01 : L'instruction CALL

3.3 Basic et langage-machine

3.3.1 L'instruction CALL

L'instruction CALL sert de lien entre le Basic et le langage-machine. Elle permet en effet d'appeler à partir d'un programme Basic un programme en langage-machine. L'instruction CALL doit être accompagnée d'une adresse 16 bits qui indique en quelle adresse figure le programme en langage-machine, par exemple:

CALL &8000

Cette instruction appellera un programme en langage-machine figurant à l'adresse &8000 ou 32768 en décimal. Si le programme en langage-machine se termine par une instruction RET, le contrôle est rendu à l'interpréteur qui poursuit l'exécution du programme Basic.

Avec l'instruction CALL on ne peut accéder directement au système d'exploitation ou à l'interpréteur Basic. Pour toute la zone d'adresses de 64 K, c'est la Ram qui est sélectionnée automatiquement. Il est cependant possible évidemment d'appeler des routines du système d'exploitation à travers les adresses d'entrée qui figurent en &B000. Ces routines s'occupent elles-mêmes de réaliser la configuration Rom/Ram qui convient. Si vous voulez accéder avec une instruction CALL à des routines de l'interpréteur Basic ou à des routines du système d'exploitation qui ne peuvent être appelées avec des vecteurs, vous pouvez utiliser les routines RST 3 et RST 5 qui réalisent la commutation.

L'instruction CALL permet cependant également de transmettre des paramètres du Basic à la routine en langage-machine. Vous pouvez pour cela transmettre jusqu'à 32 paramètres qui doivent être placés à la suite de l'instruction CALL, séparés par des virgules. Ces paramètres, ainsi que l'adresse elle-même doivent donner une valeur 16 bits. Ils sont placés par le Basic sur la pile. L'interpréteur Basic transmet l'adresse de base du bloc de paramètres dans le registre IX. Dans l'accumulateur figure le nombre de paramètres transmis.

Le dernier paramètre figure donc à l'adresse IX, l'avant-dernier à l'adresse IX+2 et le premier paramètre à l'adresse IX+2*(A-1).

Pendant l'instruction CALL, les contenus de tous les registres peuvent être modifiés. Le pointeur de pile peut lui aussi être modifié pour autant qu'on soit sûr que lors de l'exécution de l'instruction RET qui termine le programme en langage-machine, c'est bien la bonne adresse de retour qui sera retirée de la pile.

Les applications possibles de l'instruction CALL sont très diverses et vous pouvez dans ce domaine donner libre cours à votre imagination. Vous pouvez par exemple créer des fonctions graphiques nouvelles telles que le dessin de cercles, le remplissage de surfaces, etc...

La transmission de paramètres en retour, de la routine en langage-machine au Basic n'est pas prévue mais elle reste cependant possible par un petit détour. Si par exemple le résultat d'un programme en langage-machine doit être affecté à une variable, on peut transmettre l'adresse de cette variable à travers l'instruction CALL, grâce au signe 'arobas':

CALL &AB00,@A

L'adresse de la variable A sera ainsi à la disposition du programme en langage-machine qui pourra modifier directement la valeur de cette variable. Cette possibilité est décrite plus précisément dans le chapitre sur le pointeur de variable.

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 3.02.00 La pile Basic
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 254 millisecondes et consultée 1232 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.