Section courante

A propos

Section administrative du site

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