Compiler to create binaries for the AraBiCa VM.
Instr. | Args | Pop | Description |
---|---|---|---|
01 | 4 | 0 | LOAD_VAL : Empile une valeur numérique (int32) sur la pile. |
02 | 1 | 0 | READ_VAR : Empile la valeur de la variable spécifiée(uint8 pour l'ID de la variable). |
03 | 1 | 1 | STORE_VAR : Stocke la valeur du sommet de la pile dans la variable (uint8 pour l'ID de la variable). |
04 | 0 | 2 | ADD : Additionne les deux valeurs numériques (int32) au sommet de la pile. |
05 | 0 | 2 | SUB : Soustrait les deux valeurs numériques (int32) au sommet de la pile. |
06 | 0 | 2 | MUL : Multiplie les deux valeurs numériques (int32) au sommet de la pile. |
07 | 0 | 2 | DIV : Divise les deux valeurs numériques (int32) au sommet de la pile. |
08 | 0 | 2 | MOD : Modulo des deux valeurs numériques (int32) au sommet de la pile. |
09 | 4 | 0 | JMP : Saute à l'instruction en se décalant de la valeur de l'offset (int32). |
0A | 4 | 1 | JMP_IF_ZERO : Saute à l'instruction en se décalant de la valeur de l'offset si la valeur du sommet est zéro (int32). |
0B | 4 | 1 | JMP_IF_TRUE : Saute à l'instruction en se décalant de la valeur de l'offset si la valeur du sommet est non nulle(int32). |
0C | 0 | 2 | EQ : Empile 1 si les deux valeurs au sommet (int32) sont égales, sinon 0. |
0D | 0 | 2 | NEQ : Empile 1 si les deux valeurs au sommet (int32) ne sont pas égales, sinon 0. |
0E | 0 | 2 | GT : Empile 1 si la valeur en sous-sommet (int32) est plus grande que celle au sommet, sinon 0. |
0F | 0 | 2 | LT : Empile 1 si la valeur en sous-sommet (int32) est inférieure à celle au sommet, sinon 0. |
10 | 0 | 2 | GTE : Empile 1 si la valeur en sous-sommet (int32) est plus grande ou égale à celle au sommet, sinon 0. |
11 | 0 | 2 | LTE : Empile 1 si la valeur en sous-sommet (int32) est inférieure ou égale à celle au sommet, sinon 0. |
12 | 0 | 1 | PRINT_VAL : Dépile une valeur de la pile (int32) et l'imprime. |
13 | 0 | 0 | INPUT_VAL : Lit une valeur numérique (int32) de l'entrée utilisateur et l'empile. |
14 | 0 | 0 | HALT : Arrête l'exécution de la machine virtuelle. |
15 | 1+var. | 0 | LOAD_STR <taille, chaîne> : Empile une chaîne de caractères (uint8 pour sa taille, suivi de la chaîne elle-même, pas terminée par un NUL). |
16 | 0 | 1 | PRINT_STR : Dépile une référence à une chaîne et l'imprime. |
17 | 0 | 0 | INPUT_STR : Lit une chaîne de l'entrée utilisateur et empile une référence à celle-ci (uint8). |
18 | 0 | 1 | STR_LEN : Dépile une référence à une chaîne et empile la longueur de celle-ci (int32). |
19 | 0 | 2 | CONCAT : Dépile deux références à des chaînes, les concatène et empile la référence au résultat. |
1A | 0 | 1 | GET_CHAR : Dépile une référence à une chaîne (uint8) et un indice (uint8), puis empile le caractère à cet indice (char). |
1B | 0 | 3 | SET_CHAR : Dépile un caractère (char), un indice (uint8) et une référence à une chaîne (uint8), et insère le caractère à l'indice spécifié. |
1C | 0 | 2 | STR_CMP : Dépile deux références à des chaînes, les compare et empile le résultat. |
The compiled file must have one header formatted like the following:
- 4 bytes "CODE"
- 4 bytes indicating the size of the code itself (header excluded)
- 16 bytes for the program name Totalling an amount of 24 bytes. (')