Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Suivre le cycle d'un processeur (chargement, décodage, exécution)

Après cette leçon: Je peux suivre le cycle chargement, décodage, exécution d'un processeur.

Leçon de 50 min10 commandesLab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Trois milliards de pas par seconde

Un processeur de téléphone annoncé à 3 GHz bat trois milliards de fois par seconde. À chaque battement, il avance d'un tout petit pas.

Une instruction est très simple, par exemple « additionne ces deux nombres ». Et chaque instruction passe par les trois mêmes étapes. Aujourd'hui, tu les suis une par une.

À la fin de cette leçon

Remarque

Je peux suivre le cycle chargement, décodage, exécution d'un processeur.

Mots clés

MotCe que ça veut direExemple
Instructionun petit pas que le processeur sait faireadd a0, a0, a1
Adresse mémoirele numéro d'une case de la mémoire
Registreune toute petite mémoire très rapide dans le processeura0
Compteur ordinalle registre qui garde l'adresse de la prochaine instruction
Assembleurles instructions du processeur écrites en mots courts
Cycleles mêmes étapes, répétées sans arrêt

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Ce qu'il y a dans un processeur

Un programme attend en mémoire sous forme d'une liste d'instructions. Chacune est rangée à sa propre adresse mémoire.

Le processeur a une unité de commande, qui lit chaque instruction et décide quoi faire. Il a une unité arithmétique et logique (UAL), faite de portes comme à la leçon précédente, qui calcule et compare. Et il a des registres, qui gardent les nombres en cours de calcul.

Les parties et leur rôle

PartieSon rôle
MémoireGarde le programme et ses données
Compteur ordinalGarde l'adresse de la prochaine instruction
Unité de commandeComprend ce que veut dire une instruction
UALFait les additions, les soustractions et la logique
Registres comme a0 et a1Gardent les nombres en cours de calcul

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Charger, décoder, exécuter, et recommencer

Chargement : le processeur copie l'instruction rangée à l'adresse du compteur ordinal. Le compteur passe à l'adresse suivante.

Décodage : l'unité de commande comprend ce que l'instruction demande. Exécution : le processeur le fait, par exemple l'UAL additionne deux registres. Puis le cycle recommence.

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut et attends que la machine soit prête. Le programme que tu vas lire est écrit pour un processeur RISC-V. La machine du lab n'est pas RISC-V, donc un émulateur le fait tourner.

Va dans le dossier arch

Commande
cd ~/arch

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lis un programme de cinq instructions

Commande
cat add.s

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Change les mots en code machine

Commande
riscv64-linux-gnu-as add.s -o add.o

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Fais-en un programme

Commande
riscv64-linux-gnu-ld add.o -o add

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vois chaque instruction à son adresse

Commande
riscv64-linux-gnu-objdump -d add

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : suivre le programme

Compteur ordinalInstructionCe que fait l'exécutiona0a1
100b0li a0,2met 2 dans a02?
100b4li a1,3met 3 dans a123
100b8add a0,a0,a1l'UAL les additionne dans a053
100bcli a7,93choisit la demande qui arrête le programme53
100c0ecalldemande à Linux d'arrêter, avec le code a053

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent que le compteur ordinal compte combien d'instructions ont tourné. Il garde l'adresse de la prochaine. Ici, il avance de 4 à chaque fois, car chaque instruction fait 4 octets. Un saut y met une autre adresse.

Copie le programme, 40 au lieu de 2

Commande
sed 's/a0, 2/a0, 40/' add.s > quarante.s

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Assemble ta copie

Commande
riscv64-linux-gnu-as quarante.s -o quarante.o

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Fais l'édition de liens de ta copie

Commande
riscv64-linux-gnu-ld quarante.o -o quarante

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Prévois, puis lance-la sur l'émulateur

Commande
qemu-riscv64 ./quarante

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lis le résultat qu'elle a laissé

Commande
echo $?

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin : ce que voit l'émulateur

Appuie sur Open terminal et tape qemu-riscv64 -d in_asm ./add. L'émulateur affiche chaque instruction au moment où il la lit, avec son adresse.

Compare avec objdump. Que devient li a0,2 ? Pourquoi un processeur peut-il se passer d'une instruction « li » ?

À propos de ce labo et de sa source: Lab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.