19. La pile : dernier entré, premier sorti
Sauvegardez des valeurs sur la pile de données et récupérez-les dans l’ordre inverse.
Ouvrir cette leçon →
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 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
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: 22, 11
2. Construire et vérifier
Lisez deux entiers, sauvegardez-les tous deux sur la pile de données, puis affichez-les dans l’ordre inverse. Utilisez PUSH et POP plutôt que des valeurs fixes.
Types d’instructions requis: INPUT, PUSH, POP
Exemple de solution du défi
INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT
Cas réels du vérificateur
Cas 1
- Entrée
3, 8- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
8, 3
Cas 2
- Entrée
-4, 0- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
0, -4
Cas 3
- Entrée
9, 9- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
9, 9
3. Expliquer la machine
Pourquoi la deuxième valeur fournie s’affiche-t-elle en premier ?
Raisonnement et note pédagogique
PUSH et POP suivent l’ordre dernier entré/premier sorti ; avec 3, 8 en entrée, la sortie vaut 8, 3 ; les cadres d’appel ne sont pas des données.
20. Appeler un sous-programme
Réutilisez du code et revenez à l’instruction située après CALL.
Ouvrir cette leçon →
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 3
CALL square
PRINT
LOAD 4
CALL square
PRINT
HALT
square: MUL R0
RETURN
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: 9, 16
2. Construire et vérifier
Lisez deux entiers. Appelez le même sous-programme de calcul du carré pour chacun et affichez les deux carrés dans l’ordre des entrées.
Types d’instructions requis: INPUT, CALL, MUL, RETURN
Exemple de solution du défi
INPUT
CALL square
PRINT
INPUT
CALL square
PRINT
HALT
square: MUL R0
RETURN
Cas réels du vérificateur
Cas 1
- Entrée
3, 4- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
9, 16
Cas 2
- Entrée
-2, 5- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
4, 25
Cas 3
- Entrée
0, 8- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
0, 64
3. Expliquer la machine
Pourquoi deux appels du même code reviennent-ils à des endroits différents ?
Raisonnement et note pédagogique
Chaque CALL sauvegarde son propre PC + 1 dans un cadre distinct ; le corps est partagé, mais le point de reprise de l’appelant diffère.
21. Préserver l’état de l’appelant
Utilisez une convention de sauvegarde et restauration quand une fonction a besoin d’un espace temporaire.
Ouvrir cette leçon →
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 1 R1
LOOP 3
LOAD R1
CALL double
PRINT
LOAD R1
ADD 1
COPY R0 R1
RETURN
HALT
double: MUL 2
RETURN
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: 2, 4, 6
2. Construire et vérifier
Lisez une valeur à conserver dans R1, puis un argument de fonction. Appelez une fonction auxiliaire qui renvoie argument + 1 tout en utilisant temporairement R1 comme espace de travail. Affichez le résultat puis la première valeur préservée. Utilisez PUSH et POP pour préserver R1.
Types d’instructions requis: INPUT, PUSH, POP, CALL, RETURN
Exemple de solution du défi
INPUT
COPY R0 R1
INPUT
CALL helper
PRINT
LOAD R1
PRINT
HALT
helper: COPY R0 R2
LOAD R1
PUSH
LOAD 99 R1
LOAD R2
ADD 1
COPY R0 R2
POP
COPY R0 R1
LOAD R2
RETURN
Cas réels du vérificateur
Cas 1
- Entrée
12, 3- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
4, 12- Registres finaux attendus
R1: 12
Cas 2
- Entrée
-8, 0- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
1, -8- Registres finaux attendus
R1: -8
Cas 3
- Entrée
7, -5- Mémoire initiale
Tous les octets sont initialement nuls- Sortie attendue
-4, 7- Registres finaux attendus
R1: 7
3. Expliquer la machine
Quel état sauvegardé appartient à l’appelant plutôt qu’au résultat de la fonction ?
Raisonnement et note pédagogique
La convention de préservation désigne R1 ; sauvegardez et restaurez-le tout en renvoyant le résultat par R0 et en gardant les cadres d’appel distincts intacts.