Spécificité de Malbolge (lscheffer.com)
Un programme Malbolge est exécuté dans une mémoire de 3^10 cellules. Chaque cellule de la mémoire contient une valeur comprise entre 0 et 59048.
Trois registres sont nécessaires pour l’exécution :
C est le pointeur d’instruction pointant vers l’instruction courante à exécuter. Le registre est automatiquement incrémenté après chaque instruction.
Dest le pointeur de données pointant sur la valeur courante à traiter. Le registre est automatiquement incrémenté après chaque commande.
A est le registre utilisé pour l’entrée et la sortie des données.
Exécution du programme
Chargement du programme
Lors du chargement du programme, les espaces, les tabulations et les sauts de ligne sont ignorés. Lors de l’écriture dans les cellules de mémoire, il est vérifié s’il s’agit d’une commande valide. Si ce n’est pas le cas, l’exécution est interrompue.
Si la zone de mémoire est dépassée pendant l’écriture, l’exécution du programme est interrompue.
Après la lecture du programme, la zone de mémoire restante est remplie par la fonction Crazy.
Initialisation des registres
Les registres C, D et A sont initialisés à 0,
Exécuter le programme
- La lecture de la cellule mémoire C
- Le contrôle de validité
- Exécuter la commande
- Encrypter la cellule mémoire C
- Incrémenter C et D
Commandes
Commande | Explication | ||
i | 4 | jump [D] | Copie la valeur de C vers [D]. |
< | 5 | out A | Imprime la valeur de A, en tant que caractère ASCII, à l’écran. |
/ | 23 | in A | Introduit un caractère, sous forme de code ASCII, dans A. |
* | 40 | rot [D] mov A, [D] | Fait pivoter la valeur en [D] d’un chiffre ternaire. Stocke le résultat à la fois en [D] et en A. |
j | 68 | mov D, [D] | Copie la valeur de [D] sur D. |
p | 39 | D = crazy A, [D] mov A, [D] | Effectue l’opération folle avec la valeur de [D] et la valeur de A. Stocke le résultat à la fois sur [D] et dans A. |
o | 62 | nop | Ne fait rien |
v | 81 | halt | Fin du programme Malbolge |