16. Factorielle et invariants de boucle
Utilisez un accumulateur multiplicatif et expliquez pourquoi 0! vaut 1.
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 4 R1
LOAD 1 R2
LOOP 4
LOAD R2
MUL R1
COPY R0 R2
LOAD R1
SUB 1
COPY R0 R1
RETURN
LOAD R2
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 N de 0 à 6 et affichez N!. Utilisez une boucle et un accumulateur de multiplication.
Types d’instructions requis: INPUT, LOOP, MUL
Programme de départ
INPUT
COPY R0 R1
COPY R0 R3
LOAD 1 R2
LOOP R3
#
RETURN
LOAD R2
PRINT
HALT
Votre programme et vos notes
3. Expliquer la machine
Pourquoi l’accumulateur de produit commence-t-il à 1 ?
17. La suite de Fibonacci
Conservez deux valeurs précédentes et actualisez-les dans un ordre sûr.
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
LOAD 1 R2
LOOP 8
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALT
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: Tous les octets sont initialement nuls
2. Construire et vérifier
Lisez N de 0 à 8. Affichez les N premières valeurs de Fibonacci en commençant par 1, 1. N’affichez rien pour N = 0.
Types d’instructions requis: INPUT, LOOP, ADD, COPY
Programme de départ
INPUT
COPY R0 R4
LOAD 1 R1
LOAD 1 R2
LOOP R4
#
RETURN
HALT
Votre programme et vos notes
3. Expliquer la machine
Pourquoi remplacer trop tôt la première valeur précédente peut-il casser Fibonacci ?
18. Inverser un tampon mémoire
Copiez un tampon à l’envers avec des pointeurs source et destination.
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.
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD 3 R1
LOAD 16 R2
LOOP 4
LOAD [R1]
STORE R2
LOAD R1
SUB 1
COPY R0 R1
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: 0: 1, 1: 2, 2: 3, 3: 4
2. Construire et vérifier
Quatre octets sont préparés aux adresses 0 à 3. Copiez-les à l’envers aux adresses 16 à 19 sans modifier les originaux. Utilisez une boucle et des adresses dans les registres ; aucune sortie n’est requise.
Types d’instructions requis: LOOP, LOAD, STORE
Programme de départ
LOAD 3 R1
LOAD 16 R2
LOOP 4
#
RETURN
HALT
Votre programme et vos notes
3. Expliquer la machine
S’agit-il d’une inversion sur place ? Que faut-il garder inchangé ?