★ CODING ★ LA BIBLE DU CPC 6128 ★ |
La bible du CPC 6128 : 3.02.00 La pile Basic |
Une pile ou mémoire de pile (stack) permet de stocker des données suivant le principe 'Last in - First out' (dernier entré - premier sorti). Le processeur utilise à cet effet la zone de mémoire commençant en &C000. Avant chaque entrée, le pointeur de pile (stack pointer) est décrémenté. Lorsqu'on retire des données de la pile, le pointeur de pile est incrémenté immédiatement après. La pile du processeur sert par exemple à placer les adresses de retour lors de l'appel de sous-programmes et elle permet, grâce au principe d'accès utilisé, de réaliser une imbrication des sous-programmes. L'interpréteur Basic a également besoin d'une pile pour stocker les paramètres des appels par GOSUB ou des boucles FOR-NEXT et WHILE-WEND. Seule une pile permet en effet de réaliser une imbrication de ces différentes structures de programme. On n'utilise pas à cet effet la pile du processeur car il existe une pile Basic de 512 octets qui commence à l'adresse &AE8B. Au contraire de la pile du processeur, cette pile croît vers les adresses plus élevées, au fur et à mesure que le nombre d'entrées augmente, jusqu'à l'adresse limite &B08A. Les cases mémoire &B08B et &B08C font office de pointeur de pile. Voyons d'abord quels paramètres sont placés sur la pile pour une instruction GOSUB: &00/&01 marque du type de GOSUB Un octet est donc tout d'abord placé sur la pile qui détermine le type de l'instruction GOSUB. Pour un GOSUB normal, il s'agit d'un octet nul. S'il s'agit cependant de l'appel d'un sous-programme par une instruction AFTER ou EVERY, c'est un 1 qui sera placé sur la pile. Viennent ensuite l'adresse de la prochaine instruction après l'instruction GOSUB ainsi que l'adresse de la ligne dans laquelle figure l'instruction GOSUB. Pour que l'entrée sur la pile puisse être identifiée à nouveau lorsque l'instruction RETURN sera exécutée, un octet est encore placé sur la pile qui indique la longueur de l'entrée sur la pile et indique ainsi implicitement qu'il s'agit d'un enregistrement concernant une instruction GOSUB. Les données pour une boucle WHILE-WEND sont placées de façon similaire: Lo Adresse de la ligne de L'entrée comporte donc trois adresses et un octet d'identification qui vaut 7 et qui indique également le nombres d'octets de données entrés sur la pile. Les choses se compliquent un peu avec la boucle FOR-NEXT. On fait ici une distinction selon que la variable de comptage est du type entier ou du type réel. Dans le premier cas, non seulement le temps d'exécution est plus court, mais la place occupée sur la pile est en outre moindre. Considérons tout d'abord la structure d'une boucle de type entier. Lo ;Adresse de la L'entrée sur la pile pour une boucle FOR-NEXT avec variable entière est donc longue de 16 octets. Si une boucle utilise une variable de comptage de type réel, ce sont 22 octets qui seront placés sur la pile. Lo ; Adresse de la Outre le stockage des structures de programme, la pile Basic sert également au stockage d'expressions provisoires pour les calculs numériques, par exemple pour le calcul d'expressions imbriquées entre parenthèses et pour réaliser une hiérarchie pour les opérateurs arithmétiques et logiques.
|