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.

Les 25 instructions
ÉmojiMot-clé et opérandesComportementLaboratoire
📥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: 42

Ouvrir le laboratoire →
💾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: 42, 255

Ouvrir le laboratoire →
📋COPY registre-source registre-destinationCopier un registre dans un autre.
COPY · Essayer une instruction dans le laboratoire →
LOAD 7 R1
COPY R1 R2
LOAD R2
PRINT
HALT

Sortie attendue: 7

Ouvrir le laboratoire →
➕ADD valeurAjouter une valeur à R0.
ADD · Essayer une instruction dans le laboratoire →
LOAD 10
ADD 5
PRINT
HALT

Sortie attendue: 15

Ouvrir le laboratoire →
➖SUB valeurSoustraire une valeur de R0.
SUB · Essayer une instruction dans le laboratoire →
LOAD 10
SUB 3
PRINT
HALT

Sortie attendue: 7

Ouvrir le laboratoire →
✖️MUL valeurMultiplier R0 par une valeur.
MUL · Essayer une instruction dans le laboratoire →
LOAD 6
MUL 7
PRINT
HALT

Sortie attendue: 42

Ouvrir le laboratoire →
➗DIV valeur-non-nulleDiviser R0 en arrondissant vers moins l’infini.
DIV · Essayer une instruction dans le laboratoire →
LOAD -9
DIV 4
PRINT
HALT

Sortie attendue: -3

Ouvrir le laboratoire →
📊MOD valeur-non-nulleCalculer le reste signé de R0.
MOD · Essayer une instruction dans le laboratoire →
LOAD -9
MOD 4
PRINT
HALT

Sortie attendue: -1

Ouvrir le laboratoire →
🔀AND valeurEffectuer un ET bit à bit entre R0 et une valeur.
AND · Essayer une instruction dans le laboratoire →
LOAD 13
AND 5
PRINT
HALT

Sortie attendue: 5

Ouvrir le laboratoire →
🔃OR valeurEffectuer un OU bit à bit entre R0 et une valeur.
OR · Essayer une instruction dans le laboratoire →
LOAD 5
OR 2
PRINT
HALT

Sortie attendue: 7

Ouvrir le laboratoire →
❌NOTInverser les bits signés sur 32 bits de R0.
NOT · Essayer une instruction dans le laboratoire →
LOAD 255
NOT
PRINT
HALT

Sortie attendue: -256

Ouvrir le laboratoire →
🔄XOR valeurEffectuer 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: 44

Ouvrir le laboratoire →
⚖️CMP valeurRé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: 1

Ouvrir le laboratoire →
⏭️JUMP cibleSauter à 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: 1

Ouvrir le laboratoire →
❓JUMP_IF_ZERO cibleSauter 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: 0

Ouvrir le laboratoire →
🔁LOOP nombreRé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: 1, 2, 3

Ouvrir le laboratoire →
🛑RETURNTerminer 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: 8

Ouvrir le laboratoire →
📞CALL cibleAppeler 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: 9, 16

Ouvrir le laboratoire →
🖨️PRINTAjouter la valeur actuelle de R0 à la sortie.
PRINT · Essayer une instruction dans le laboratoire →
LOAD 3
PRINT
PRINT
HALT

Sortie attendue: 3, 3

Ouvrir le laboratoire →
📲INPUTLire 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: -5

Sortie attendue: -5

Ouvrir le laboratoire →
⬆️PUSHEmpiler R0 sur la pile de données.
PUSH · Essayer une instruction dans le laboratoire →
LOAD 42
PUSH
LOAD 0
POP
PRINT
HALT

Sortie attendue: 42

Ouvrir le laboratoire →
⬇️POPDé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: 22, 11

Ouvrir le laboratoire →
⏹️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: 7

Ouvrir le laboratoire →
💤SLEEP millisecondesDemander à 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: 1, 2

Ouvrir le laboratoire →
⏸️NOPAvancer 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: 7

Ouvrir le laboratoire →

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 →