CODINGLA 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

Lo Adresse de l'instruction suivant
Hi ;l'instruction GOSUB

Lo Adresse de la ligne de
Hi ;l'instruction GOSUB

&06 Taille de l'entrée sur la pile

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
Hi ;l'instruction WHILE

Lo Adresse de
Hi ;l'instruction WEND

Lo Adresse de
Hi ;la condition WHILE

&07 ;Taille de l'entrée sur la pile

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
Hi ;variable de comptage

Lo Valeur finale de la
Hi ;variable de comptage

Lo Valeur STEP
Hi

Sgn ;Signe de la valeur STEP

Lo ;Adresse de
Hi ;l'instruction FOR

Lo Adresse de la ligne de
Hi ;l'instruction FOR

Lo Adresse de
Hi ;l'instruction NEXT

Lo ;Adresse de la ligne
Hi ;de l'instruction NEXT

&10 Taille de l'entrée sur la pile

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
Hi ;variable de comptage

Valeur à virgule Valeur finale de la flottante sur variable de comptage 5 octets
Valeur à virgule Valeur STEP flottante sur 5 octets

Sgn ; Signe de la valeur STEP

Lo ; Adresse de
Hi ; l'instruction FOR

Lo ; Adresse de la ligne de
Hi ; l'instruction FOR

Lo ; Adresse de
Hi ;l'instruction NEXT

Lo ; Adresse de la ligne
Hi ; de l'instruction NEXT

&16 ;Taille de l'entrée sur la pile

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.

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 3.01.00 L'interpréteur Basic du CPC
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
Page créée en 728 millisecondes et consultée 2292 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.