\", \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.