La vache est constituée d’une séquence continue d’instructions moo, qui sont stockées dans une mémoire de programme et sont traitées en continu en commençant par la première instruction.
Les données sont stockées dans une mémoire de données et traitées avec un registre.
Commandes
Nr | Instruction | Description |
---|---|---|
0 | moo | Cette commande est liée à la commande MOO. Lorsqu’elle est rencontrée au cours d’une exécution normale, elle recherche le code du programme en sens inverse à la recherche d’une commande MOO correspondante et recommence l’exécution à partir de la commande MOO trouvée. Lors de la recherche, elle saute l’instruction qui la précède immédiatement (voir MOO). |
1 | mOo | Déplace la position actuelle de la mémoire d’un bloc en arrière. |
2 | moO | Déplace la position actuelle de la mémoire d’un bloc vers l’avant. |
3 | mOO | Exécute la valeur du bloc mémoire actuel comme s’il s’agissait d’une instruction. La commande exécutée est basée sur la valeur du code d’instruction (par exemple, si le bloc mémoire actuel contient un 2, la commande moO est exécutée). Une commande non valide quitte le programme en cours d’exécution. La valeur 3 n’est pas valide car elle provoquerait une boucle infinie. |
4 | Moo | Si le bloc de mémoire actuel contient un 0, lire un seul caractère ASCII à partir de STDIN et le stocker dans le bloc de mémoire actuel. Si le bloc mémoire actuel n’est pas 0, alors imprimez le caractère ASCII qui correspond à la valeur du bloc mémoire actuel sur STDOUT. |
5 | MOo | Décrémente la valeur du bloc mémoire actuel de 1. |
6 | MoO | Incrémente de 1 la valeur du bloc mémoire actuel. |
7 | MOO | Si la valeur du bloc mémoire actuel est égale à 0, ignore la commande suivante et reprend l’exécution après la prochaine commande moo correspondante. Si la valeur du bloc mémoire actuel est différente de 0, continuez avec la commande suivante. Notez que le fait d’ignorer la commande qui la suit immédiatement a des ramifications intéressantes pour savoir où se trouve réellement la commande moo correspondante. Par exemple, la commande suivante correspondra à la deuxième commande moo et non à la première : OOO MOO moo moo |
8 | OOO | Mettre la valeur du bloc mémoire actuel à 0. |
9 | MMM | S’il n’y a pas de valeur actuelle dans le registre, copier la valeur du bloc mémoire actuel. S’il y a une valeur dans le registre, coller cette valeur dans le bloc de mémoire actuel et effacer le registre. |
10 | OOM | Imprime la valeur du bloc mémoire actuel sur STDOUT comme un entier. |
11 | oom | Lire un nombre entier à partir de STDIN et le placer dans le bloc de mémoire actuel. |