13. Les boucles : répéter des actions
Associez LOOP à RETURN et gérez correctement zéro répétition.
1. Prévoir et tracer
Avant d’exécuter le programme d’essai, prévoyez sa sortie et tracez les trois premières instructions exécutées. Suivez les registres, les indicateurs ou la mémoire pertinents, selon le besoin. Avancez ensuite pas à pas pour comparer.
LOAD 8 LOOP 4 PRINT RETURN HALT
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: Tous les octets sont initialement nuls
Corrigé de la prédiction d’essai
Sortie: 8, 8, 8, 8
| Instruction | PC avant | PC après | R0 avant | R0 après | État pertinent | Sortie |
|---|---|---|---|---|---|---|
| LOAD | 0 | 1 | 0 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]} | Aucune |
| LOOP | 1 | 2 | 8 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[{"start":1,"end":3,"remaining":4,"callDepth":0}],"memoryReads":[],"memoryWrites":[]} | Aucune |
| 2 | 3 | 8 | 8 | {"registers":[8,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[{"start":1,"end":3,"remaining":4,"callDepth":0}],"memoryReads":[],"memoryWrites":[]} | 8 |
2. Construire et vérifier
Lisez un nombre de répétitions de 0 à 5. Affichez 8 exactement ce nombre de fois, puis arrêtez le programme.
Types d’instructions requis: INPUT, LOOP, PRINT, RETURN
Exemple de solution du défi
INPUT COPY R0 R1 LOAD 8 LOOP R1 PRINT RETURN HALT
Cas réels du vérificateur
Cas 1
- Entrée
0- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
Aucune
Cas 2
- Entrée
1- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
8
Cas 3
- Entrée
4- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
8, 8, 8, 8
3. Expliquer la machine
Combien de fois LOOP 0 exécute-t-il son corps ?
Raisonnement et note pédagogique
Zéro : il saute le corps et son RETURN correspondant. Un nombre négatif provoque une erreur.