\"
, \n
, \\
,
Instruction | Description |
ADD | dépile n puis m qui doivent être entiers et empile le résultat m+n |
SUB | dépile n puis m qui doivent être entiers et empile le résultat m-n |
MUL | dépile n puis m qui doivent être entiers et empile le résultat m× n |
DIV | dépile n puis m qui doivent être entiers et empile le résultat m/n |
MOD | dépile n puis m qui doivent être entiers et empile le résultat m mod n |
NOT | dépile n qui doit être un entier et empile le résultat de n=0 |
INF | dépile n puis m qui doivent être entiers et empile le résultat m < n |
INFEQ | dépile n puis m qui doivent être entiers et empile le résultat m £ n |
SUP | dépile n puis m qui doivent être entiers et empile le résultat m > n |
SUPEQ | dépile n puis m qui doivent être entiers et empile le résultat m ³ n |
Instruction | Description |
FADD | dépile n puis m qui doivent être réels et empile le résultat m+n |
FSUB | dépile n puis m qui doivent être réels et empile le résultat m-n |
FMUL | dépile n puis m qui doivent être réels et empile le résultat m× n |
FDIV | dépile n puis m qui doivent être réels et empile le résultat m/n |
FINF | dépile n puis m qui doivent être réels et empile le résultat m < n |
FINFEQ | dépile n puis m qui doivent être réels et empile le résultat m £ n |
FSUP | dépile n puis m qui doivent être réels et empile le résultat m > n |
FSUPEQ | dépile n puis m qui doivent être réels et empile le résultat m ³ n |
Instruction | Description |
CONCAT | dépile n puis m qui doivent être des adresses de chaîne, empile l'adresse d'une chaîne égale à la concaténation de la chaîne d'adresse n et de celle d'adresse m. |
Instruction | Argument | Description |
ALLOC | n entier | alloue sur le tas un bloc structuré de taille n et empile l'adresse correspondante |
ALLOCN | dépile un entier n, alloue sur le tas un bloc structuré de taille n et empile l'adresse correspondante | |
FREE | dépile une adresse a et libère le bloc structuré alloué à l'adresse a |
Instruction | Description |
EQUAL | dépile n puis m qui doivent être de même type et empile le résultat de n=m |
Instruction | Description |
ATOI | dépile l'adresse d'une chaîne et empile sa conversion en nombre entier, échoue si la chaîne ne représente pas un entier. |
ATOF | dépile l'adresse d'une chaîne et empile sa conversion en nombre réel, échoue si la chaîne ne représente pas un réel. |
ITOF | dépile un entier et empile sa conversion en nombre réel. |
FTOI | dépile un réel et empile l'entier représentant sa partie entière (obtenue en supprimant les décimales). |
STRI | dépile un entier et empile l'adresse d'une chaîne représentant cet entier |
STRF | dépile un réel et empile l'adresse d'une chaîne représentant ce réel |
Instruction | Argument | Description |
PUSHI | n entier | empile n |
PUSHN | n entier | empile n fois la valeur entière 0 |
PUSHF | n réel | empile n |
PUSHS | n chaîne | stocke n dans la zone des chaînes et empile l'adresse |
PUSHG | n entier | empile la valeur située en gp[n] |
PUSHL | n entier | empile la valeur située en fp[n] |
PUSHSP | empile la valeur du registre sp | |
PUSHFP | empile la valeur du registre fp | |
PUSHGP | empile la valeur du registre gp | |
LOAD | n entier | dépile une adresse a et empile la valeur dans la pile ou le tas située en a[n] |
LOADN | dépile un entier n, une adresse a et empile la valeur dans la pile ou le tas située en a[n] | |
DUP | n entier | duplique et empile les n valeurs en sommet de pile |
DUPN | dépile un entier n, puis duplique et empile les n valeurs en sommet de pile |
Instruction | Argument | Description |
POP | n entier | dépile n valeurs dans la pile |
POPN | dépile un entier n puis dépile n valeurs dans la pile |
Instruction | Argument | Description |
STOREL | n entier | dépile une valeur et la stocke dans la pile en fp[n] |
STOREG | n entier | dépile une valeur et la stocke dans la pile en gp[n] |
STORE | n entier | dépile une valeur v et une adresse a, stocke v à l'adresse a[n] dans la pile ou le tas |
STOREN | dépile une valeur v, un entier n et une adresse a, stocke v à l'adresse a[n] dans la pile ou le tas |
Instruction | Argument(s) | Description |
CHECK | n,p entiers | vérifie que le sommet de la pile est un entier i tel que n £ i £ p, sinon déclenche une erreur |
SWAP | dépile n puis m et rempile n puis m |
Instruction | Description |
WRITEI | dépile un entier et l'imprime sur la sortie standard |
WRITEF | dépile un réel et l'imprime sur la sortie standard |
WRITES | dépile l'adresse d'une chaîne et imprime la chaîne correspondante sur la sortie standard |
READ | lit une chaîne de caractères au clavier, terminée par un retour-chariot, stocke la chaîne (sans le retour-chariot) et empile l'adresse. |
Instruction | Argument | Description |
JUMP | label étiquette | affecte au registre pc l'adresse dans le programme correspondant à label qui peut être un entier ou une valeur symbolique. |
JZ | label étiquette | dépile une valeur, si elle est nulle affecte au registre pc l'adresse dans le programme correspondant à label sinon incrémente pc de 1. |
PUSHA | label étiquette | empile l'adresse dans le code correspondant à l'étiquette label |
Instruction | Description |
CALL | dépile une adresse de code a, sauvegarde pc et fp dans la pile des appels, affecte à fp la valeur courante de sp et à pc la valeur a. |
RETURN | affecte à sp la valeur courante de fp, restaure de la pile des appels les valeurs de fp et pc et incrémente pc de 1 pour se retrouver à l'instruction suivant celle d'appel. |
Instruction | Argument | Description |
START | Affecte la valeur de sp à fp | |
NOP | ne fait rien. | |
ERR | x chaîne | déclenche une erreur d'instruction avec le message x. |
STOP | arrête l'exécution du programme |
//
et se poursuivent jusqu'à la
fin de la ligne.
Les identificateurs obéissent à l'expression régulière áidentñ
suivante :
ádigitñ | ::= | 0--9 |
áalphañ | ::= | a--z | A--Z |
áidentñ | ::= | (áalphañ | _) (áalphañ | ádigitñ | _ | ')* |
áintegerñ | ::= | -? ádigitñ+ |
áfloatñ | ::= | -? ádigitñ+ (. ádigitñ*)? ((e | E) (+ | -)? ádigitñ+)? |
"
,
et peuvent contenir ce même caractère seulement s'il est précédé du
caractère \
. En d'autres termes, les chaînes obéissent à
l'expression régulière suivante :
ástringñ | ::= | " ([^ " ] | \ " )* " |
ácodeñ ::= áinstrñ* áinstrñ ::= áidentñ : | áinstr_atomñ | áinstr_intñ áintegerñ | pushf áfloatñ | (pushs | err) ástringñ | check áintegerñ , áintegerñ | (jump | jz | pusha) áidentñ áinstr_atomñ ::= add | sub | mul | div | mod | not | inf | infeq | sup | | supeq | fadd | fsub | fmul | fdiv | finf | finfeq | fsup | | fsupeq | concat | equal | atoi | atof | | itof | ftoi | stri | strf | | pushsp | pushfp | pushgp | loadn | storen | swap | | writei | writef | writes | read | call | return | | start | nop | stop | allocn | free | dupn | popn | áinstr_intñ ::= pushi | pushn | pushg | pushl | load | | dup | pop | storel | storeg | alloc
Figure 1: Syntaxe des programmes
vm [options] [fichier.vm]Lorsque le fichier est omis, le code est lu sur l'entrée standard. Les options sont les suivantes :
gvm [options] [fichier.vm]Les seules options sont -ssize et -csize, similaires à celles de la machine vm.
"
message"
This document was translated from LATEX by HEVEA.