Un cap pour ce chapitre
Ce que vous saurez faire
- Dérouler une séquence d’instructions simples
- Suivre accumulateur mémoire et compteur ordinal
- Expliquer un branchement et une condition d’arrêt
Les bases utiles pour commencer
Fixer le modèle avant la trace
Notre machine pédagogique possède une mémoire de données, un accumulateur nommé ACC et un compteur ordinal PC qui désigne la prochaine instruction. Les instructions sont numérotées à partir de zéro. LOAD X copie la donnée X dans ACC ; STORE X copie ACC vers X. ADD X ajoute la donnée X à ACC ; SUB X la soustrait. Ces conventions sont inventées pour l’apprentissage et ne constituent pas le langage d’un processeur réel. Leur précision est essentielle : une trace n’est vérifiable que si le sens de chaque instruction est connu.
La mémoire et le registre sont des emplacements distincts. Une instruction de chargement copie une valeur ; elle ne crée pas un lien permanent entre les deux. Après un calcul dans ACC, une nouvelle instruction de stockage est nécessaire pour mettre à jour la mémoire.
Charger, calculer puis stocker
Pour additionner A et B et conserver le résultat dans S, on exécute LOAD A, ADD B, STORE S puis HALT. Avec A = 4 et B = 7, ACC devient d’abord 4, puis 11, et S reçoit enfin 11. A et B restent inchangés. L’addition modifie l’accumulateur, pas automatiquement toutes les cases impliquées dans le calcul. Le stockage explicite explique pourquoi un résultat peut exister temporairement dans un registre avant d’être inscrit à l’emplacement où la suite du programme le cherchera.
La trace peut comporter une ligne par instruction, avec l’adresse exécutée puis le prochain PC. Le PC observé après une instruction ordinaire ne désigne plus celle qui vient d’être exécutée. Annoncer cet instant d’observation évite un décalage apparent dans toutes les lignes du tableau.
Le compteur ordinal organise la suite
Après une instruction ordinaire, PC passe à l’adresse suivante. Un branchement change cette progression : JMP k fixe PC à k, tandis que JZ k le fait seulement si ACC vaut zéro. Une boucle peut donc se représenter par une séquence qui teste une valeur, la modifie puis revient à une instruction antérieure. Le compteur ordinal n’est ni le résultat du calcul ni le nombre total d’instructions déjà exécutées. Une instruction à l’adresse zéro peut être exécutée plusieurs fois, et le nombre de passages augmente même lorsque PC revient en arrière.
Un branchement conditionnel lit le registre sans nécessairement le modifier. Il peut conduire à une instruction éloignée ou revenir en arrière. Le nombre d’exécutions augmente toujours, même lorsque l’adresse diminue : une adresse de programme n’est pas un compteur de temps.
Vérifier les valeurs et l’arrêt
HALT arrête notre machine. Une boucle qui décrémente un entier naturel jusqu’à zéro peut atteindre cette instruction si le test et la mise à jour sont correctement placés. Si l’on oublie STORE N après la soustraction, la mémoire garde l’ancienne valeur ; le prochain LOAD N la recharge et la boucle peut recommencer indéfiniment. Cet exemple relie directement la trace machine à la terminaison d’un algorithme. Une limite d’observation dans un simulateur empêche une attente infinie, mais ne doit pas être confondue avec une instruction d’arrêt appartenant au programme.
Atteindre zéro en mémoire et exécuter HALT sont deux événements différents. La boucle peut encore devoir recharger zéro, tester cette valeur et rejoindre l’arrêt. Un curseur placé entre ces étapes montre un résultat déjà nul mais un programme pas encore arrêté.
Dérouler exactement un tour de décrémentation
Avec N égal à deux, les cinq premières instructions sont chargement de N, test de zéro non pris, soustraction de un, stockage dans N puis retour à l’adresse zéro. Après la soustraction, ACC vaut un mais N vaut encore deux. Après le stockage, les deux valent un. Le second tour reprend alors avec la mémoire mise à jour.
Après deux tours, N vaut zéro, mais il faut encore charger zéro, prendre le branchement vers HALT et exécuter HALT. Le total est donc treize instructions dans ce programme : cinq par décrémentation, puis trois pour le chemin final.
Construire une opération composée avec un registre
Pour calculer (A + B) - C et stocker dans S, on peut charger A, ajouter B, soustraire C, puis stocker S. Avec A égal à neuf, B à quatre et C à six, ACC passe par neuf, treize puis sept. S ne reçoit sept qu’au stockage. Les trois entrées restent inchangées.
Une étape peut donc produire un résultat intermédiaire utile sans le rendre encore disponible dans la mémoire de sortie. Si le programme charge une autre donnée avant le stockage, il peut perdre ce résultat. La trace des transferts est ainsi aussi importante que la justesse arithmétique des calculs.
À vous de faire varier les choses
Pilotez le compteur ordinal
Choisissez un programme et avancez le nombre d’instructions exécutées. Sur la boucle, observez LOAD, le test, la soustraction et le stockage.
Lire le résultat de l’expérience initiale
Prochaine instruction : 0 · LOAD N
ACC est un registre de calcul. N change seulement lors de STORE N. La progression peut être reprise en déplaçant le curseur.
| Étape | Adresse | Instruction | ACC | N | Prochain PC |
|---|
Le résultat dépend du trajet des valeurs entre mémoire et registre, ainsi que de l’ordre imposé par le compteur ordinal.
De la compréhension à l’autonomie
À vous de résoudre
Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.
Un calcul en quatre instructions
Avec A = 6, B = 3 et S = 0, exécutez LOAD A ; ADD B ; STORE S ; HALT. Donnez ACC et S après chaque étape utile.
Indice 1
LOAD ne modifie pas encore S.
Indice 2
STORE copie le registre dans la mémoire.
Comprendre la correction
Après LOAD A, ACC vaut 6 et S reste 0. Après ADD B, ACC vaut 9 et S reste 0. Après STORE S, S vaut 9 et ACC conserve 9. HALT arrête l’exécution sans modifier ces valeurs. Les données A et B n’ont été que lues.
Le branchement pris ou ignoré
L’instruction d’adresse 2 est JZ 7. Quel est le prochain PC si ACC vaut 0 ? Et si ACC vaut 5 ?
Indice 1
JZ teste l’accumulateur.
Indice 2
Si le test échoue, on poursuit à l’instruction suivante.
Comprendre la correction
Avec ACC = 0, le branchement est pris et PC devient 7. Avec ACC = 5, il n’est pas pris et PC devient 3. Le nombre 7 désigne ici une adresse d’instruction, pas une valeur à placer dans ACC. Le registre n’est pas modifié par ce branchement dans notre modèle.
Une décrémentation perdue
Une boucle charge N = 3, soustrait ONE = 1 mais ne stocke pas le résultat dans N avant de recommencer. Pourquoi N ne se rapproche-t-il jamais de zéro ?
Indice 1
La soustraction agit sur ACC.
Indice 2
Le prochain LOAD relit la mémoire inchangée.
Comprendre la correction
ACC devient 2 après la soustraction, mais la mémoire N reste 3. Au tour suivant, LOAD N remplace ACC par 3, effaçant le résultat temporaire. Il faut exécuter STORE N pour conserver la diminution. La boucle peut alors relire successivement 2, puis 1, puis 0 et atteindre sa condition d’arrêt.
Adresse et nombre d’exécutions
Un programme exécute successivement les adresses 0, 1, 2, 3, 0 et 1. Peut-on déduire du dernier PC que seulement deux instructions ont été exécutées ?
Indice 1
Une adresse peut être visitée plusieurs fois.
Indice 2
Comptez les occurrences de la liste, pas les adresses distinctes.
Comprendre la correction
Six instructions ont été exécutées dans la séquence donnée. Le dernier numéro d’adresse ne compte pas les exécutions : il indique une position du programme. Le retour à zéro traduit un branchement. Cette distinction est indispensable pour suivre une boucle et pour étudier ensuite le coût d’un traitement.
Un calcul composé dans ACC
La mémoire contient A = 9, B = 4, C=6, S = 0. Exécutez LOAD A, ADD B, SUB C, STORE S, HALT. Donnez les valeurs successives de ACC et le moment où S change. Les données d’entrée sont-elles modifiées ?
Indice 1
Les opérations arithmétiques ciblent le registre.
Indice 2
Seul STORE S modifie la sortie en mémoire.
Comprendre la correction
ACC vaut neuf après le chargement, treize après l’addition et sept après la soustraction. STORE S copie sept dans S sans modifier ACC. HALT arrête le programme. A, B et C restent identiques, car ils ont seulement été lus. S demeure zéro pendant les trois premières instructions.
Compter le chemin jusqu’à HALT
Le programme de boucle de l’atelier exécute cinq instructions par décrémentation, puis LOAD N, JZ 5 et HALT lorsque N est nul. Calculez le nombre d’instructions pour N initial égal à 2, puis zéro. Pourquoi cinq fois N ne suffit-il pas ?
Indice 1
La phase finale ne décrémente plus N.
Indice 2
Le test et l’arrêt sont encore des instructions exécutées.
Comprendre la correction
Pour deux, on compte dix instructions de décrémentation puis trois pour le chemin final : treize. Pour zéro, aucune décrémentation n’a lieu mais les trois instructions finales sont exécutées. Le nombre cinq fois N ignore la lecture du zéro, le branchement et l’arrêt. La formule complète est 5 * N + 3.
Un résultat perdu avant stockage
La mémoire contient A = 5, B = 7, C=2 et S = 0. Le programme exécute LOAD A, ADD B, LOAD C, STORE S. Donnez S final. Il devait stocker A + B : identifiez la première instruction qui contredit ce but et proposez une correction.
Indice 1
LOAD remplace le contenu du registre.
Indice 2
Le résultat douze existe avant le chargement de C.
Comprendre la correction
Après les deux premières instructions, ACC vaut douze. LOAD C le remplace par deux ; STORE S écrit donc deux. Le chargement de C détruit le résultat destiné à S. Il faut stocker S avant ce chargement ou supprimer ce chargement s’il n’a aucune utilité dans le calcul demandé.
Les erreurs qui méritent un détour
- Penser qu’une opération sur
ACCmodifie automatiquement la mémoire - Repérez les instructions
STOREqui rendent le résultat disponible dans une case mémoire. - Confondre
PCet compteur de passages PCdésigne une instruction ; une trace doit compter séparément les étapes exécutées.
La fiche à garder
L’essentiel à retenir
- Le jeu d’instructions définit le sens de la trace.
- Les registres et la mémoire peuvent contenir des valeurs différentes.
- Un branchement modifie l’ordre des instructions.
Cette notion au bac
Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.
Le prochain pas
Retrouver le catalogue de Première
Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.
