Processeur basé sur la pile
# Processeur basé sur la pile

Certains processeurs utilisent non pas des registres pour conserver les données, mais une ou plusieurs piles. Les instructions prennent alors pour opérandes les premiers éléments de la pile.

## Jeu d'instruction

### Instructions

Dans un tel processeur, les instructions (addition, multiplication, chargement d'une valeur en mémoire...) utilisent généralement les deux premiers éléments de la pile. On trouve aussi des instructions de manipulation de pile, par exemple permettant de supprimer un élément, ou d'inverser certains d'entre eux. Le langage Forth est souvent utilisé pour programmer ce type de processeur.

Selon les cas, on peut aussi disposer de registres ou d'instructions utilisant des opérandes plutôt que le sommet de la pile, voire de plusieurs piles. Typiquement, l'une d'elles peut-être réservée pour retenir les adresses de retour des fonctions.

### Avantage d'un tel jeu d'instructions

Comme il n'y a pas besoin de référencer les opérandes comme sur les processeurs à registres, les instructions peuvent être très courtes. On peut donc l'utiliser avec profit sur des systèmes embarqués où la mémoire est limitée. De plus, l'accès n'étant possible que pour les premiers éléments, les circuits peuvent être plus simples, permettant de consommer moins d'énergie et parfois d'intégrer de nombreux cœurs de processeur.

Lorsque les ordinateurs ne disposaient pas d'une grande puissance de calcul, la compilation était également plus simple pour un processeur à pile.

### Inconvénients

Les premiers processeurs à pile conservaient celle-ci en mémoire. Comme celle-ci est désormais plus lente que le processeur, cette technique n'est plus d'actualité : on parle de la seconde génération de processeurs à pile pour ceux qui utilisent des registres internes du processeur pour mémoriser les premiers éléments.

Même ainsi, ces processeurs rendent difficile le parallélisme au niveau des instructions et ajoutent des instructions pour manipuler la pile, ce qui contribue à les écarter de l'informatique grand public pour des raisons de rapidité.

Comme ces processeurs sont bien moins utilisés que les architectures à registres classiques, les techniques d'optimisation du code ont été moins explorées, même si des méthodes efficaces d'allocation ont été développées pour minimiser l'utilisation des opérations de manipulation de la pile.

