Académique Documents
Professionnel Documents
Culture Documents
MENTION ELECTRONIQUE
Niveau : M2
1
Sommaire
INTRODUCTION ....................................................................................................................................... 1
Chapitre 1 Machines à états finis aux ordinateurs", ............................................................................... 2
1.Généralités sur La machine à états finis........................................................................................... 2
2. Résolution d'un problème simple de manière algorithmique et construction d'un algorithme .... 3
Chapitre 2 Introduction Rapide à Python" .............................................................................................. 5
1.Chaine de caractères et listes........................................................................................................... 5
1.1 Chaine de caractère ................................................................................................................... 5
1.2 Listes .......................................................................................................................................... 5
2.Les fonctions..................................................................................................................................... 6
3. Exemple de programme Python pour simuler la mémoire d’un ordinateur ou simulation de la
mémoire avec python ......................................................................................................................... 6
Chapitre 3 Flux de Données dans un Ordinateur..................................................................................... 8
1 . L'ordinateur de von Neumann et le cycle fetch-execute ............................................................... 8
2. Flux d'informations et format d'instruction .................................................................................... 9
3.Assembleur ....................................................................................................................................... 9
4 .Langage machine ........................................................................................................................... 11
4.1 Langage machine RISC ............................................................................................................. 11
4.2 Langage machine CISC ............................................................................................................. 11
Chapitre 4 Création d'un Interpréteur .................................................................................................. 12
1 Construction d’un simple interpréteur avec python ...................................................................... 12
2 Décodage et exécution des instructions ........................................................................................ 13
Chapitre 5 Un Peu Plus de Python" ....................................................................................................... 15
1 .Fonctionnalités clés de Python...................................................................................................... 15
2 .Étude des listes et des chaînes de caractères comme structures de données essentielles. ........ 16
3. Introduction du dictionnaire comme une structure de données permettant de rechercher des
informations par clé. ......................................................................................................................... 17
4.Utilisation des list comprehensions pour simplifier le traitement du texte des instructions de
langage d'assemblage en nettoyant l'entrée .................................................................................... 18
Chapitre 6 TC1 Assembleur et Conception du Simulateur" ................................................................. 20
2.Description de l'architecture du jeu d'instructions de TC1 ............................................................ 20
3 . Présentation des deux composants de base du simulateur : l'assembleur et l'interpréteur. ..... 21
4. Explorations des caractéristiques inhabituelles de TC1, ............................................................... 22
2
INTRODUCTION
Le livre "Practical Computer Architecture with Python and ARM"s'agit d'un ouvrage
qui vise à enseigner les principes fondamentaux de l'architecture informatique en utilisant
Python comme langage de programmation et l'architecture ARM comme exemple.
ARM est une architecture de processeur qui signifie "Advanced RISC Machine"
(Machine à jeu d'instructions réduit avancé) .Elle se distingue par sa conception de jeu
d'instructions RISC (Reduced Instruction Set Computing) et sa consommation d'énergie
relativement faible. Ces processeurs sont largement utilisés dans les smartphones, les
tablettes, les appareils IoT (Internet des Objets), les systèmes embarqués dans les
automobiles, les appareils ménagers intelligents, les routeurs, et même dans certains serveurs
Le livre comprend deux parties .Dans ce rapport, nous allons étudier la première
partie « Utilisation de Python pour simuler un ordinateur ».Cette partie introduit deux thèmes
l'ordinateur numérique et le langage de programmation Python que nous allons étudier dans
ce rapport
1
Chapitre 1 Machines à états finis aux ordinateurs",
Les notions que j’ai acquises dans ce chapitre sont l’introduction les ordinateurs
numériques en utilisant les machines à états finis pour modéliser des systèmes de contrôle
simples. Ce chapitre aborde le concept d'algorithmes et de programmes .
États : Des conditions dans lesquelles le système peut se trouver à un moment donné.
Transitions : Des conditions ou des événements qui déclenchent le passage d'un état à un
autre.
Actions : Les actions associées à chaque transition, qui peuvent inclure des opérations ou des
modifications de l'environnement du système.
Exemple 1
Un ascenseur peut être dans l'état de montée, de descente ou de vol horizontal, et il peut
passer de l'un à l'autre de manière bien définie à travers des actions spécifiques (boutons
d'appel d'ascenseur, boutons d'étage, etc.
On utilise le modèle abstrait d’une machine à états finis pour comprendre comment
fonctionne un ordinateur . Ils possèdent un ensemble d'états et de transitions qui définissent
leur comportement. Les instructions du programme, les données et les événements externes
déclenchent des changements d'état. Par exemple, dans un ordinateur, les états pourraient
représenter différents modes de fonctionnement comme "en attente", "en cours d'exécution"
ou "en veille".
2
dans les machines à états se produisent à des moments spécifiques, ce qui est analogue à
l'exécution d'instructions dans un programme informatique.
Comme les ordinateurs et de nombreux autres systèmes numériques peuvent être modélisés à
l'aide de machines à états, leur étude sert souvent d'introduction à ces domaines
n1 = milieu - gauche + 1
n2 = droite - milieu
Pour i de 0 à n1-1
gauche_temp[i] = liste[gauche + i]
Pour j de 0 à n2-1
droite_temp[j] = liste[milieu + 1 + j]
i=0
j=0
k = gauche
liste[k] = gauche_temp[i]
i=i+1
Sinon
3
liste[k] = droite_temp[j]
j=j+1
k=k+1
liste[k] = gauche_temp[i]
i=i+1
k=k+1
liste[k] = droite_temp[j]
j=j+1
k=k+1
tri_fusion(Liste, 0, taille(Liste) - 1)
4
Chapitre 2 Introduction Rapide à Python"
Les instructions de l'ordinateur, telles que les opcodes, les opérandes et les adresses mémoire,
peuvent être stockées sous forme de chaînes de caractères.
# Cette chaîne de caractères représente une instruction d'addition avec les opérandes 10 et 20.
Messages et rapports
Les chaînes de caractères peuvent également être utilisées pour afficher des messages à
l'utilisateur, des rapports sur l'état de la simulation, des erreurs ou des résultats intermédiaires.
1.2 Listes
Les listes sont des structures de données polyvalentes en Python qui peuvent contenir une
séquence ordonnée d'éléments. Dans le contexte d'un simulateur d'ordinateur :
Les listes peuvent être utilisées pour stocker des données séquentielles telles que des
instructions à exécuter, des valeurs de registres, des adresses mémoire, etc.
5
registres[1] = 10 # Modifie la valeur du registre 1
print(registres)
Accès séquentiel
Les listes permettent un accès séquentiel aux éléments, ce qui est souvent nécessaire lors de la
lecture et de l'exécution des instructions dans un simulateur d'ordinateur.
if instruction.startswith("LOAD"):
elif instruction.startswith("ADD"):
elif instruction.startswith("STORE"):
else:
2.Les fonctions
Le concept des fonctions est introduit comme des morceaux de code réutilisables pour
effectuer des opérations spécifiques, rendant le code plus lisible et plus facile à déboguer
def init_memory(taille):
return [0] * taille # Crée une liste de taille avec des zéros
memory[adresse] = valeur
6
print(f"Écriture de la valeur {valeur} à l'adresse {adresse}")
else:
valeur = memory[adresse]
return valeur
else:
return None
taille_memoire = 100
memoire = init_memory(taille_memoire)
write_memory(memoire, 0, 10)
write_memory(memoire, 1, 20)
valeur1 = read_memory(memoire, 0)
valeur2 = read_memory(memoire, 1)
7
Chapitre 3 Flux de Données dans un Ordinateur
Les notions que j’ai acquises dans ce chapitre sont l’architecture de Von Neumann et
le langage assembleur
L'ordinateur de von Neumann, est un concept fondamental en informatique qui décrit une
architecture informatique commune à la plupart des ordinateurs modernes. Ce modèle
architectural repose sur plusieurs principes clés :
Le cycle fetch-execute est le processus fondamental par lequel l'ordinateur de von Neumann
exécute les programmes. Ce cycle se déroule en plusieurs étapes :
Décode (Décodage) : Une fois que l'instruction est récupérée, l'unité de contrôle la décode
pour déterminer quelle opération doit être effectuée et sur quelles données.
Une fois que l'étape d'exécution est terminée, le cycle fetch-execute se répète avec la
récupération de la prochaine instruction à exécuter. Ce cycle se poursuit jusqu'à ce que le
programme se termine ou soit interrompu.,
8
2. Flux d'informations et format d'instruction
Lors de l'exécution d'une instruction, des données sont transférées entre les différentes
parties du système informatique, y compris le processeur, la mémoire et les périphériques. Le
format d'une instruction comprend des champs tels que l'opcode (code opération) qui spécifie
l'action à effectuer, ainsi que d'autres données nécessaires à cette action, comme des adresses
mémoire, des valeurs littérales ou des numéros de registre
Par exemple, pour une instruction d'addition dans un format d'instruction hypothétique, le
format pourrait ressembler à ceci :
Opcode: ADD
Registre1: 2
Registre2: 3
Cela signifierait que l'opération à effectuer est une addition, et les données à additionner sont
situées dans les registres 2 et 3.
3.Assembleur
L'assembleur et les instructions conditionnelles, syntaxes mnémoniques et littéraux
Forme générale:
Extrait de code
si condition alors
instructions
sinon
autres instructions
finsi
9
Extrait de code
int 80h
finsi
si EBX = 0 alors
jmp $+5
finsi
Syntaxes mnémoniques
Exemples de mnémoniques:
Les littéraux sont des valeurs constantes qui peuvent être assignées à des variables ou utilisées
directement dans les instructions.
Extrait de code
variable = valeur
10
Utilisez ce code avec précaution.
Extrait de code
; Afficher la valeur 10
mov eax, 10
int 80h
4 .Langage machine
Le langage machine, quel que soit le type d'architecture (RISC ou CISC), est un ensemble
d'instructions codées en binaire que le processeur peut comprendre et exécuter directement.
Cependant, la façon dont ces instructions sont conçues diffère entre les architectures RISC
(Reduced Instruction Set Computer) et CISC (Complex Instruction Set Computer).
Instructions simples: Les instructions RISC sont généralement plus simples et plus courtes
que les instructions CISC. Elles se concentrent sur des opérations de base comme le
déplacement de données entre registres et la réalisation d'opérations arithmétiques et logiques
simples.
Décodage rapide: En raison de leur simplicité, les instructions RISC peuvent être décodées
plus rapidement par le processeur, ce qui peut améliorer les performances.
Pipeline efficace: L'architecture RISC favorise un pipeline d'instructions plus efficace, où le
processeur peut commencer à décoder l'instruction suivante pendant que l'instruction courante
est toujours en cours d'exécution.
Besoin de plus d'instructions: Pour effectuer des tâches complexes, un programme RISC
peut nécessiter plus d'instructions qu'un programme CISC équivalent.
Instructions complexes: Les instructions CISC peuvent être plus complexes et plus longues
que les instructions RISC. Elles peuvent inclure des opérations multi-étapes, comme le
chargement d'une valeur en mémoire et son addition à une autre valeur en une seule
instruction.
Décodage plus lent: Le décodage des instructions CISC peut prendre plus de temps en raison
de leur complexité.
Pipeline moins efficace: La complexité des instructions CISC peut compliquer le pipeline
d'instructions.
Code plus compact: Un programme CISC peut nécessiter moins d'instructions pour effectuer
la même tâche qu'un programme RISC équivalent.
11
Chapitre 4 Création d'un Interpréteur
1 Construction d’un simple interpréteur avec python
Un interpréteur est un programme informatique qui lit et exécute du code source écrit dans un
langage de programmation particulier. Dans cet article, nous allons voir comment construire
un simple interpréteur avec Python.
Analyse lexicale : L'interpréteur décompose le code source en jetons, qui sont les
éléments de base du langage de programmation.
Analyse syntaxique: L'interpréteur vérifie que la structure du code source est correcte.
Analyse sémantique: L'interpréteur détermine la signification du code source.
Génération de code : L'interpréteur génère du code machine que le processeur peut
exécuter.
Exécution: L'interpréteur exécute le code machine généré.
Pour construire un simple interpréteur avec Python, nous pouvons utiliser les modules
suivants :
`ast` : Ce module fournit des fonctions pour l'analyse syntaxique et l'analyse sémantique.
import re
import ast
def interprete(code):
# Analyse lexicale
arbre = ast.parse(code)
# Génération de code
# Exécution
exec(code_machine)
# Exemple d'utilisation
12
interprete("print('Hello, world!')")
Cet interpréteur est très simple et ne peut exécuter que des expressions simples. Cependant, il
peut être utilisé comme base pour construire des interpréteurs plus complets
Décodage
Décodage des opérandes: Le processeur décode les opérandes de l'instruction. Les opérandes
sont les valeurs sur lesquelles l'opération est effectuée.
Exécution
Mise à jour du PC: Le processeur met à jour le registre d'instruction (PC) pour pointer vers
l'instruction suivante à exécuter.
Exemple
Cette instruction additionne les valeurs des registres R2 et R3 et stocke le résultat dans le
registre R1. Voici comment cette instruction serait décodée et exécutée :
Décodage
3. Le processeur décode les opérandes, qui sont les registres `R1`, `R2` et `R3`.
13
Exécution
1. Le processeur charge les valeurs des registres `R2` et `R3` dans l'unité arithmétique et
logique (ALU).
Le décodage et l'exécution d'une instruction peuvent être influencés par plusieurs facteurs, tels
que :
14
Chapitre 5 Un Peu Plus de Python"
1 .Fonctionnalités clés de Python.
Ce point implique l'exploration des fonctionnalités fondamentales de Python, telles que les
boucles, les structures de données, les fonctions, etc. Cela peut inclure l'étude de la syntaxe de
base, des opérateurs, des types de données et des concepts de programmation spécifiques à
Python.
Exemple
print(nom)
print("\nNombres de 1 à 5 :")
i=1
while i <= 5:
print(i)
i += 1
ages = {"Alice": 25, "Bob": 30, "Charlie": 35, "David": 40, "Eve": 45}
def afficher_age(nom):
if nom in ages:
else:
afficher_age("Alice")
afficher_age("Bob")
afficher_age("Frank")
15
nombres_pairs.add(12)
2 .Étude des listes et des chaînes de caractères comme structures de données essentielles.
Il s'agit de comprendre comment utiliser efficacement les listes et les chaînes de caractères en
Python. Les listes sont des collections ordonnées d'éléments modifiables, tandis que les
chaînes de caractères sont des séquences de caractères immuables. On étudie comment créer,
accéder, modifier et manipuler ces stru ctures de données.
fruits[1] = "kiwi"
fruits.append("ananas")
del fruits[2]
16
# Concaténation de chaînes de caractères
if "jour" in chaine_concatenee:
else:
etudiants = {
cle_etudiant = "B456"
etudiants["C789"]["age"] = 23
17
etudiants["D987"] = {"nom": "David", "age": 24, "ville": "Bordeaux"}
del etudiants["A123"]
if "A123" in etudiants:
else:
Exemples
Imaginons que nous ayons une liste d'instructions de langage d'assemblage sous forme de
chaînes de caractères, mais ces instructions contiennent des caractères spéciaux ou des
espaces supplémentaires que nous voulons nettoyer. Nous pouvons utiliser les list
comprehensions pour simplifier ce processus.
instructions_assembleur = [
"JMP LABEL"
18
# Utilisation de list comprehensions pour nettoyer les instructions
print(instruction)
Nous utilisons une list comprehension pour nettoyer chaque instruction en utilisant les
méthodes strip() pour supprimer les espaces en début et fin de chaîne et replace(",", "") pour
supprimer les virgules.
19
Chapitre 6 TC1 Assembleur et Conception du Simulateur"
1 .Le simulateur TC1
Le simulateur TC1 est présenté comme un outil capable de prendre un fichier texte écrit en
langage d'assemblage TC1, de le traduire en code machine et de l'exécuter. Cela permet aux
utilisateurs de programmer en langage d'assemblage TC1 et de voir comment leurs
programmes sont exécutés sur un ordinateur virtuel.
Le simulateur traduit ensuite le code d'assemblage en code machine que le processeur peut
exécuter.
Le simulateur peut afficher les résultats de l'exécution du programme, tels que la valeur des
registres et la sortie du programme.
Il peut également afficher des informations de débogage, telles que la trace d'exécution et les
valeurs de la mémoire.
20
Similarités avec une architecture RISC classique:
Opérations sur les registres: Comme vous l'avez mentionné, l'architecture du jeu
d'instructions de TC1 est similaire à une architecture RISC classique. Cela signifie que
la plupart des instructions opèrent sur des données stockées dans les registres du
processeur.
Réduction de la mémoire externe: Cette approche permet de réduire l'utilisation de la
mémoire externe pour les calculs, ce qui peut améliorer la vitesse d'exécution du
programme.
Instructions simples: Les architectures RISC, y compris TC1, ont tendance à avoir un
ensemble d'instructions plus simple que les architectures CISC. Cela facilite la
conception du processeur et peut également améliorer la vitesse d'exécution.
Taille des registres: Le jeu d'instructions TC1 utilise généralement des registres de 32
bits.
Types de données: Le jeu d'instructions prend en charge les types de données courants
tels que les entiers, les flottants et les caractères.
Instructions arithmétiques et logiques: Le jeu d'instructions inclut des instructions pour
les opérations arithmétiques et logiques basiques, telles que l'addition, la soustraction,
la multiplication, la division, et le ET/OU/NON logique.
Instructions de transfert de données: Le jeu d'instructions inclut des instructions pour
charger et stocker des données dans la mémoire, ainsi que pour copier des données
entre les registres.
Instructions de branchement: Le jeu d'instructions inclut des instructions pour les sauts
conditionnels et inconditionnels, permettant de contrôler le flux d'exécution du
programme.
Instructions d'appel et de retour: Le jeu d'instructions inclut des instructions pour
appeler des sous-programmes et pour revenir de l'appel.terne pour les calculs.
21
Exemple:
ADD R1, R2, R3 ; Additionne les valeurs des registres R2 et R3 et stocke le résultat dans R1
L'assembleur:
Analyse du code: L'assembleur lit le code d'assemblage ligne par ligne et analyse chaque
instruction.
Génération du fichier objet: L'assembleur génère un fichier objet qui contient le code binaire
et d'autres informations symboliques.
L'interpréteur:
Chargement du fichier objet: L'interpréteur charge le fichier objet généré par l'assembleur en
mémoire.
Exécution des instructions: L'interpréteur lit chaque instruction binaire et l'exécute une par
une.
Suivi de l'état du processeur: L'interpréteur suit l'état du processeur, y compris les registres, la
mémoire et le compteur d'instructions.
Exemple d'exécution:
Lorsque l'interpréteur exécute le code d'assemblage ci-dessus, il effectue les étapes suivantes :
Il charge les valeurs des registres R2 et R3 dans l'unité arithmétique et logique (ALU).
22
CONCLUSION
La simulation d'un ordinateur avec Python est un outil pédagogique précieux pour
apprendre les concepts fondamentaux de l'architecture informatique. Cette approche m’a
permis d'expérimenter et de visualiser le fonctionnement d'un ordinateur de manière
accessible et interactive.
On nous a demandé de lire le livre Pratical Computer Architecture with Python and
ARM et faire un rapport de ce qu'on a appris du livre.J'ai lu que la 1ère partie Utilisation de
Python pour simuler un ordinateur ».Qu'est ce que je peux faire comme conclusion de mon
rapport
23