Empilage et dépilage des nombres entiers

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 

Opérations arithmétiques élémentaires

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.

Somme de deux nombres entiers

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:


Fatal error: Uncaught Error: Call to a member function sourceForView() on null in /home/arduinofom/eforthwin/articles/pages/elements/numbersInForth.phtml:235 Stack trace: #0 /home/arduinofom/eforthwin/application/views/scripts/article/index.phtml(7): include() #1 /home/arduinofom/vendors/ZendFramework-1.12.20/library/Zend/View.php(157): include('/home/arduinofo...') #2 /home/arduinofom/vendors/ZendFramework-1.12.20/library/Zend/View/Abstract.php(888): Zend_View->_run('/home/arduinofo...') #3 /home/arduinofom/vendors/ZendFramework-1.12.20/library/Zend/Controller/Action/Helper/ViewRenderer.php(912): Zend_View_Abstract->render(NULL) #4 /home/arduinofom/vendors/ZendFramework-1.12.20/library/Zend/Controller/Action/Helper/ViewRenderer.php(933): Zend_Controller_Action_Helper_ViewRenderer->renderScript('article/index.p...', NULL) #5 /home/arduinofom/vendors/ZendFramework-1.12.20/library/Zend/Controller/Action/Helper/ViewRenderer.php(972): Zend_Controller_Action_Helper_ViewRenderer->render() #6 /home/arduinofom/vendors/ZendFramewo in /home/arduinofom/eforthwin/articles/pages/elements/numbersInForth.phtml on line 235