Le langage FORTH stocke les nombres sur une pile nommée pile de données ou pile paramétrique. L'empilage d'un nombre est très simple:
55
empile le nombre 55. Pour dépiler ce nombre, il y a plusieurs méthodes. La plus simple
consiste à afficher le contenu du dernier élément empilé. Le mot .
(point) affiche 55.
55 \ display ok . \ display 55 ok
Si vous déposez plusieurs nombres sur la pile de données, voici ce qui se passe:
11 45 6543?>
Les nombres sont mis sur la pile de données dans l'ordre de frappe. Le dernier nombre entré est toujours au sommet de la pile:
valeur empilée | haut -- pile -- fond |
---|---|
11 | 11 |
45 | 45 11 |
6543 | 6543 45 11 |
Le dépilage successif des nombres affiche ceux-ci dans l'ordre inverse de leur empilage:
11 45 6543 \ display ok . \ display 6543 ok . \ display 45 ok . \ display 11 ok
Pour mieux visualiser le mécanisme d'empilage et de dépilage des nombres, pensez à une pile d'assiettes: la dernière assiette déposée sur la pile sera la première reprise.
A tout moment vous pouvez prendre connaissance du contenu de la pile de données sans avoir
à provoquer le dépilage des valeurs qui y sont stockées en utilisant le mot .S
:
1 2 3 .S
affiche 1 2 3
Ce principe de rangement est appelé également pile LIFO (Last In, First Out) dans certains ouvrages écrits en anglais pour désigner une pile dont le mécanisme est: "dernier entré, premier sorti".
Avec la majorité des versions du langage FORTH, la quantité de nombres empilables est assez élevée, mais reste limitée. Si vous empilez trop de nombres, vous saturerez la pile de données. De même, toute tentative pour dépiler un nombre alors que la pile de données est vide, affichera un message d'erreur.
Chaque nombre empilé ne peut être qu'un nombre entier au format simple précision. Selon les cas, ce nombre peut être considéré signé ou non signé:
En format simple précision signé, le bit de poids le plus fort indique le signe du nombre.
La valeur -1, déposée sur la pile en tant que valeur entière a la représentation binaire suivante:
11111111111111111111111111111111
(simple précision 32 bits).
Cette même valeur peut être affichée en valeur absolue en utilisant le mot U.
à la place du mot .
(point):
-1 U. \ affiche 4294967295
Les opérateurs arithmétiques + - *
et /
agissent sur les deux
valeurs situées au sommet de la pile de données. Les valeurs traitées sont toujours
des entiers simple précision signés.
Pour additionner deux nombres, il faut d'abord les déposer sur la pile de données:
22 44 + .
affiche 66
Une fois empilés 22 et 44, le mot +
opère l'addition de ces deux
valeurs et le mot .
affiche le résultat: