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 GOSUBLo 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 WHILELo 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 comptageLo 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 comptageValeur à 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.CPCrulez[Content Management System] v8.732-desktop/c Page créée en 075 millisecondes et consultée 2659 foisL'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. |
|