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
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
Programme de départ
INPUT
PUSH
INPUT
PUSH
#
HALT
Votre programme et vos notes
3. Expliquer la machine
Pourquoi la deuxième valeur fournie s’affiche-t-elle en premier ?
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
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
Programme de départ
INPUT
CALL square
PRINT
INPUT
CALL square
PRINT
HALT
square:
#
RETURN
Votre programme et vos notes
3. Expliquer la machine
Pourquoi deux appels du même code reviennent-ils à des endroits différents ?
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
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
Programme de départ
INPUT
COPY R0 R1
INPUT
CALL helper
PRINT
LOAD R1
PRINT
HALT
helper:
#
RETURN
Votre programme et vos notes
3. Expliquer la machine
Quel état sauvegardé appartient à l’appelant plutôt qu’au résultat de la fonction ?