Le manuel de la machine
Référence des instructions en émojis
Saisissez l’émoji ou son mot-clé. Les registres R0 à R7 contiennent des entiers représentables exactement ; R0 est l’accumulateur. La mémoire comporte 256 adresses d’un octet (0 à 255). Les calculs gardent les valeurs entières complètes ; les opérations bit à bit utilisent des valeurs signées sur 32 bits.
Les étiquettes se terminent par deux-points. Les sauts visent une étiquette ou un indice d’instruction à partir de zéro, en ignorant les lignes vides et les commentaires. # commence un commentaire. LOAD [10] lit la mémoire ; LOAD 10 charge le nombre littéral 10.
| Émoji | Mot-clé et opérandes | Comportement | Laboratoire |
|---|---|---|---|
| 📥 | LOAD valeur [registre] | Charger une valeur, un registre ou un octet mémoire. | LOAD · Essayer une instruction dans le laboratoire →LOAD 42 PRINT HALT Sortie attendue: |
| 💾 | STORE [valeur] adresse | Écrire l’octet de poids faible d’une valeur en mémoire. | STORE · Essayer une instruction dans le laboratoire →LOAD 42 STORE 10 STORE 511 11 LOAD [10] PRINT LOAD [11] PRINT HALT Sortie attendue: |
| 📋 | COPY registre-source registre-destination | Copier un registre dans un autre. | COPY · Essayer une instruction dans le laboratoire →LOAD 7 R1 COPY R1 R2 LOAD R2 PRINT HALT Sortie attendue: |
| ➕ | ADD valeur | Ajouter une valeur à R0. | ADD · Essayer une instruction dans le laboratoire →LOAD 10 ADD 5 PRINT HALT Sortie attendue: |
| ➖ | SUB valeur | Soustraire une valeur de R0. | SUB · Essayer une instruction dans le laboratoire →LOAD 10 SUB 3 PRINT HALT Sortie attendue: |
| ✖️ | MUL valeur | Multiplier R0 par une valeur. | MUL · Essayer une instruction dans le laboratoire →LOAD 6 MUL 7 PRINT HALT Sortie attendue: |
| ➗ | DIV valeur-non-nulle | Diviser R0 en arrondissant vers moins l’infini. | DIV · Essayer une instruction dans le laboratoire →LOAD -9 DIV 4 PRINT HALT Sortie attendue: |
| 📊 | MOD valeur-non-nulle | Calculer le reste signé de R0. | MOD · Essayer une instruction dans le laboratoire →LOAD -9 MOD 4 PRINT HALT Sortie attendue: |
| 🔀 | AND valeur | Effectuer un ET bit à bit entre R0 et une valeur. | AND · Essayer une instruction dans le laboratoire →LOAD 13 AND 5 PRINT HALT Sortie attendue: |
| 🔃 | OR valeur | Effectuer un OU bit à bit entre R0 et une valeur. | OR · Essayer une instruction dans le laboratoire →LOAD 5 OR 2 PRINT HALT Sortie attendue: |
| ❌ | NOT | Inverser les bits signés sur 32 bits de R0. | NOT · Essayer une instruction dans le laboratoire →LOAD 255 NOT PRINT HALT Sortie attendue: |
| 🔄 | XOR valeur | Effectuer un OU exclusif bit à bit entre R0 et une valeur. | XOR · Essayer une instruction dans le laboratoire →LOAD 42 XOR 6 PRINT HALT Sortie attendue: |
| ⚖️ | CMP valeur | Régler les indicateurs selon R0 moins une valeur, sans modifier R0. | CMP · Essayer une instruction dans le laboratoire →LOAD 7 CMP 7 JUMP_IF_ZERO same LOAD 0 JUMP show same: LOAD 1 show: PRINT HALT Sortie attendue: |
| ⏭️ | JUMP cible | Sauter à une étiquette ou à un indice d’instruction à partir de zéro. | JUMP · Essayer une instruction dans le laboratoire →LOAD 1 JUMP show LOAD 99 show: PRINT HALT Sortie attendue: |
| ❓ | JUMP_IF_ZERO cible | Sauter si l’indicateur zéro mémorisé est vrai. | JUMP_IF_ZERO · Essayer une instruction dans le laboratoire →LOAD 0 JUMP_IF_ZERO show LOAD 99 show: PRINT HALT Sortie attendue: |
| 🔁 | LOOP nombre | Répéter le bloc qui se termine au RETURN correspondant. | LOOP · Essayer une instruction dans le laboratoire →LOOP 0 LOAD 99 PRINT RETURN LOAD 1 LOOP 3 PRINT ADD 1 RETURN HALT Sortie attendue: |
| 🛑 | RETURN | Terminer une itération de boucle ou revenir d’un sous-programme. | RETURN · Essayer une instruction dans le laboratoire →LOAD 7 CALL increment PRINT HALT increment: ADD 1 RETURN Sortie attendue: |
| 📞 | CALL cible | Appeler un sous-programme et sauvegarder l’instruction suivante. | CALL · Essayer une instruction dans le laboratoire →LOAD 3 CALL square PRINT LOAD 4 CALL square PRINT HALT square: MUL R0 RETURN Sortie attendue: |
| 🖨️ | PRINT | Ajouter la valeur actuelle de R0 à la sortie. | PRINT · Essayer une instruction dans le laboratoire →LOAD 3 PRINT PRINT HALT Sortie attendue: |
| 📲 | INPUT | Lire un entier dans R0 ; attendre si l’entrée est vide. | INPUT · Essayer une instruction dans le laboratoire →INPUT PRINT HALT Entrée entière: Sortie attendue: |
| ⬆️ | PUSH | Empiler R0 sur la pile de données. | PUSH · Essayer une instruction dans le laboratoire →LOAD 42 PUSH LOAD 0 POP PRINT HALT Sortie attendue: |
| ⬇️ | POP | Dépiler une valeur de la pile de données dans R0. | POP · Essayer une instruction dans le laboratoire →LOAD 11 PUSH LOAD 22 PUSH POP PRINT POP PRINT HALT Sortie attendue: |
| ⏹️ | HALT (ou STOP) | Arrêter sur l’instruction actuelle. | HALT · Essayer une instruction dans le laboratoire →LOAD 7 PRINT HALT LOAD 99 PRINT Sortie attendue: |
| 💤 | SLEEP millisecondes | Demander à l’appelant un délai en millisecondes. | SLEEP · Essayer une instruction dans le laboratoire →LOAD 1 PRINT SLEEP 100 LOAD 2 PRINT HALT Sortie attendue: |
| ⏸️ | NOP | Avancer sans modifier les valeurs ni les indicateurs. | NOP · Essayer une instruction dans le laboratoire →LOAD 7 CMP 7 NOP JUMP_IF_ZERO show LOAD 0 show: PRINT HALT Sortie attendue: |
Indicateurs, boucles et appels
Z signifie que le dernier résultat est nul. N indique un résultat négatif ; O indique un résultat hors de l’intervalle signé sur 32 bits. LOAD dans n’importe quel registre, COPY, les calculs, les instructions bit à bit, POP et INPUT mettent à jour les indicateurs. CMP les règle selon R0 moins son opérande sans modifier R0. JUMP_IF_ZERO consulte Z, y compris après une comparaison.
LOOP capture son nombre une fois et répète son bloc avec le RETURN correspondant ; zéro saute le bloc. CALL utilise une pile distincte d’adresses de retour. RETURN dans une fonction appelée revient à l’appelant avant de continuer une boucle extérieure. PUSH et POP utilisent une pile de données distincte. SP commence à 255 et diminue selon la profondeur combinée des données et appels, jusqu’à 256 entrées.
DIV arrondit vers moins l’infini ; MOD donne un reste signé. STORE écrit l’octet de poids faible (−1 devient 255). INPUT attend un entier représentable exactement. SLEEP demande un délai temporisé au laboratoire ; la machine virtuelle déterministe elle-même n’attend pas. Un programme peut finir par HALT ou en atteignant sa fin ; les destinations de branchement invalides sont des erreurs.
Essayer une instruction dans le laboratoire →