Introduction
Le PCode est souvent considéré comme une des références à la fois les plus simples et les plus complètes en termes de code machine indépendant. Il a été créé dans les années 1970 par Niklaus Wirth pour les compilateurs en langage de programmation Pascal.
Ensemble d'instruction du PCode (P-Code)
Le P-Code repose sur des instructions similaires au langage assembleur, avec cependant une certaines simplifications et un moins grandes nombres d'instructions que l'assembleur dédié à un microprocesseur précis. Voici la liste des P-Code proposé par Niklaus Wirth :
| Instruction | Opération dans la pile | Paramètres si présent | Description | |
|---|---|---|---|---|
| Avant | Après | |||
| ABI | (i) | i | Cette instruction permet de mettre la valeur absolue de l'entier | |
| ABR | (r) | r | Cette instruction permet de mettre la valeur absolue d'un réel | |
| ADI | (i,i) | i | Cette instruction permet d'ajouter deux entiers dans le haut de la pile et laisse un nombre entier comme résultat. | |
| ADR | (r,r) | r | Cette instruction permet d'ajouter deux réels dans le haut de la pile et laisse un nombre réel comme résultat. | |
| CHKc | Pas de changement | PQ | Cette instruction permet de vérifier que la valeur est entre les limites hautes et basses. | |
| CHR | (i) | c | Cette instruction permet de convertir un entier en caractère. | |
| CSP | Spécial | Q | Cette instruction permet d'appeler une procédure standard. | |
| CUP | Spécial | PQ | Cette instruction permet d'appeler une procédure utilisateur. | |
| DECc | (x) | x | Q | Cette instruction permet de décrémenté une valeur |
| DIF | (s, s) | s | Cette instruction permet de fixer la différence, | |
| DVI | (i,i) | i | Cette instruction permet d'effectuer la division d'un nombre entier. | |
| DVR | (r,r) | r | Cette instruction permet d'effectuer une division d'un nombre réel. | |
| ENT | Spécial | PQ | Cette instruction permet d'entrer un bloc | |
| EOF | (a) | b | Cette instruction permet de tester à la fin du fichier. | |
| EQUc | (x,x) | b | Q | Cette instruction permet d'effectuer une comparaison d'égalité. |
| FJP | (b) | Cette instruction permet d'effectuer un branchement à adresse si la condition est fausse. | ||
| FLO | (i,r) | r,r | Cette instruction permet de rechercher le prochain réel dans le haut. | |
| FLT | (i) | r | Cette instruction permet de mettre un nombre réel dans le haut de la pile. | |
| GEQc | (x,x) | b | Q | Cette instruction permet de comparer une condition supérieur ou égale. |
| INCc | (x) | x | Q | Cette instruction permet d'incrémenter une valeur |
| INDc | (a) | x | Q | Cette instruction permet d'aller chercher un index. |
| INN | (i,s) | b | Cette instruction permet de tester un ensemble d'adhésion. | |
| INT | (s,s) | s | Cette instruction permet de fixer une intersection. | |
| IOR | (b,b) | b | Cette instruction permet d'effectuer une opération booléenne «Ou inclusif». | |
| IXA | (a,i) | a | Q | Cette instruction permet de calculer l'adresse d'index. |
| LAO | a | Q | Cette instruction permet de charger le niveau d'adresse de base. | |
| LCA | a | Q | Cette instruction permet de charger l'adresse de la constante. | |
| LCI | x | PQ | Cette instruction permet de charger une constante indirecte. Génération assembleur. | |
| LDA | a | PQ | Cette instruction permet de charger l'adresse avec le niveau P. | |
| LDCc | x | Q | Cette instruction permet de charger une constante. | |
| LDOc | x | Q | Cette instruction permet de charger le contenu d'un niveau d'adresse de base. | |
| LEQc | (x,x) | b | Q | Cette instruction permet d'effectuer une comparaison inférieur ou égale. |
| LESc | (x,x) | b | Q | Cette instruction permet d'effectuer une comparaison inférieur. |
| LODc | x | PQ | Cette instruction permet de charger le contenu d'une adresse. | |
| MOD | (i,i) | i | Cette instruction permet d'effectuer un restant de division. | |
| MOV | (a,a) | Q | Cette instruction permet de copier une valeur d'un emplacement vers un autre. | |
| MPI | (i,i) | i | Cette instruction permet d'effectuer une multiplication de nombre entier. | |
| MPR | (r,r) | r | Cette instruction permet d'effectuer un multiplication de nombre réel. | |
| MST | Spécial | P | Cette instruction permet de marquer la pile. | |
| NEQc | (x,x) | b | Q | Cette instruction permet d'effectuer une comparaison de n'étant pas égale. |
| NGI | (i) | i | Cette instruction permet d'effectuer une inversion des signes d'un nombre entier. | |
| NGR | (r) | r | Cette instruction permet d'effectuer une inversion des signes d'un nombre réel. | |
| NOT | (b) | b | Cette instruction permet d'effectuer une négation booléenne. | |
| ODD | (i) | b | Cette instruction permet d'effectuer un test si impaire. | |
| ORDc | (x) | i | Cette instruction permet de convertir en nombre entier. | |
| RETc | Spécial | Cette instruction permet de retourner un bloc. | ||
| SBI | (i,i) | i | Cette instruction permet de soustraire un nombre entier. | |
| SBR | (r,r) | r | Cette instruction permet de soustraire un nombre réel. | |
| SGS | (i) | s | Cette instruction permet de générer un ensemble simple. | |
| SQI | (i) | i | Cette instruction permet d'effectuer la racine d'un nombre entier. | |
| SQR | (r) | r | Cette instruction permet d'effectuer la racine d'un nombre réel. | |
| SROc | (x) | Q | Cette instruction permet d'entreposer l'adresse à un niveau de base. | |
| STOc | (a,x) | Cette instruction permet d'entreposer à un niveau de base l'adresse. | ||
| STP | Pas d'effet | Cette instruction permet de fixer un point d'arrêt. | ||
| STRc | (x) | PQ | Cette instruction permet d'entreposer au niveau P. | |
| TRC | (r) | i | Cette instruction permet de tronquer un nombre réel. | |
| UJC | Pas d'effet | Cette instruction permet d'indiquer une erreur dans l'instruction d'évaluation de cas. | ||
| UJP | Pas d'effet | Q | Cette instruction permet d'effectuer un branchement inconditionnelle à une adresse. | |
| UNI | (s, s) | s | Cette instruction permet d'effectuer une union. | |
| XJP | (i) | Q | Cette instruction permet d'effectuer un branchement à un index. | |
Liste des effets des clefs dans la pile :
| Code | Description |
|---|---|
| a | Adresse |
| b | Booléen |
| c | Caractère |
| i | Entier |
| r | Réel |
| s | Ensemble |
| x | N'importe quel type de données |
Dernière mise à jour : Samedi, le 1er octobre 2016