Sous-sections de Première

Frise chronologique

  • Pascal conçoit la Pascaline: cette machine mécanique peut effectuer des additions et des soustractions de deux nombres. Il crée cette machine pour faciliter la tâche de son père qui devait remettre en ordre les recettes fiscales de la province de Normandie.
  • Joseph-Marie Jacquard a développé un métier à tisser avec lequel le motif à tisser était déterminé par des cartes perforées.
  • Les cartes perforées contiennent le programme du motif à tisser.
  • Charles Babbage imagine la machine analytique: une machine à calculer programmable. Ada Lovelace conçoit le premier programme informatique.
  • Ada Lovelace mesure le véritable potentiel de la machine analytique de Babbage. Elle est considérée comme la première programmeuse.
  • George Boole crée une algèbre binaire, dite booléenne, n'acceptant que deux valeurs numériques : 0 et 1.
  • Flemming invente la diode à vide. En 1906, De Forest ajoute une troisième électrode (la grille de contrôle) : naissance de la triode.
  • Alan Turing conceptualise la machine universelle qui permet de définir les bases de l'informatique.
  • L’allemand Konrad Zuse achève le Z1 en 1938, un ordinateur mécanique en binaire, puis le Z3 en 1941: il réalisait 3-4 additions par seconde.
  • Mauchly et Eckert conçoivent le premier ordinateur entièrement électronique: ENIAC (Electronic Numerical Integrator And Computer). Sous l’influence de John von Neumann, l’ENIAC est à partir de 1947 reconverti en ordinateur à programme enregistré.
  • John von Neumann propose une nouvelle architecture machine: elle utilise une structure de stockage unique pour conserver à la fois les instructions et les données.
  • L'EDVAC est un projet qui s'appuie sur le rapport de von Neumann. Sa conception tente de résoudre des problèmes posés par l'architecture de l'ENIAC.
  • Invention du transistor par Bradley, Shockley et Brattain.
  • Le transistor devient plus fiable et plus petit.
  • Claude Shannon développe la théorie de l'information qui pose les bases de la transmission de messages à travers des canaux physiques.
  • Fortran (FORmula TRANslating) est le premier langage de haut-niveau; il est développé par l'ingénieur d'IBM Backus.
  • Cobol (COmmon Business Oriented Language) est inspiré des travaux de Grace Hopper. Cette dernière (et son équipe) a précédemment développé le premier compilateur pour le premier ordinateur commercial (UNIVAC en 1951)
  • Les circuits intégrés remplace peu à peu les transistors. Le 4004 d’Intel est le premier microprocesseur commercialisé.
  • Le langage C est développé par Kenneth Thompson et Dennis Ritchie pour écrire le système d'exploitation UNIX (ancêtre des systèmes GNU/Linux, Mac OS). Un article détaillant leur histoire sur ce lien
  • Python est développé par Guido von Rossum pour faciliter les interactions (appel système) avec le système d'exploitation sur lequel il travaillait. C'est un langage interprété et de haut-niveau.
  • Tim Berners-Lee est considéré comme le père du web. Il développe cette nouvelle technologie au CERN (Organisation Européenne pour la Recherche Nucléaire).
  • Brendan Eich développe le langage javascript pour le navigateur Netscape 1, ancêtre de Mozilla Firefox.
  • La science informatique devient une discipline au lycée: la spécialité NSI (Numérique et Science Informatique) fait partie des choix pour les élèves de première et terminale.

Sous-sections de Modèle d'architecture

Simulation ordinateur

Mach 01

Objectif: Comprendre le rôle des composants principaux d’un ordinateur

Rôles:

  • Processeur (5 rôles):

    1. lire la prochaine instruction du programme,
    2. en déduire la couleur à utiliser en s’aidant de la roue,
    3. voir si la couleur est présente dans une mémoire registre sinon donner l’instruction au bus pour qu’il rapporte la nouvelle couleur,
    4. prendre la bonne couleur à l’emplacement,
    5. colorier la case de la bonne couleur.
Remarque

Le rôle 3 ne peut pas donner une nouvelle instruction au bus, tant que le rôle 5 n’a pas reposé son crayon.

  • Bus (1 rôle): transporter les couleurs entre le processeur et la mémoire vive

  • Mémoire vive (0 rôle): stocke les couleurs

Principe:

  • Un programme est une suite d’instructions qui permet de reconstituer une image programme programme
    • Le premier nombre sur une ligne est la couleur du premier pixel de cette ligne.
    • Pour chacun des autres pixels de la ligne on donne le décalage entre l’ancienne couleur et la nouvelle.
  • Dès que le processeur a besoin d’une couleur qu’il n’a pas dans sa mémoire registre, il doit la demander à son bus. S’il a déjà trois couleurs devant lui, il doit en rendre une.
  • La machine simulée possède:
    • 2 processeurs,
    • 1 bus,
    • 1 mémoire vive.
Source

Une activité proposée et construite par Marie Duflot Kremer.

Von Neumann

Mach 02

Résumé du cours

  • Un ordinateur est composé de plusieurs éléments essentiels: le processeur (CPU), la mémoire, les entrées et les sorties.

  • Le CPU comprend l’unité de contrôle qui décode les instructions et l’unité arithmétique et logique qui effectue les calculs.

  • La mémoire stocke les données et les instructions (programmes) utilisées par le processeur. Il existe différents types de mémoire avec des temps d’accès variés (registres, mémoire cache, RAM, disque dur, etc.).

  • Les entrées permettent d’alimenter la machine en données et instructions, tandis que les sorties permettent de récupérer les résultats.

Von Neumann Von Neumann

  • Le modèle de von Neumann propose de considérer un programme comme une donnée stockée en mémoire, ce qui permet d’automatiser l’exécution des tâches.

  • Les différents composants communiquent via des bus informatiques qui transmettent les données, les adresses et les signaux de contrôle.

  • Bien que le modèle de base soit toujours utilisé, il a évolué avec l’ajout de processeurs spécialisés, de mémoires persistantes (ROM), etc.

Émission Eurêka - von Neumann

Mach 03

Activité complémentaire

Remarque

Cette activité est à réaliser en dehors du temps de cours. Certains travaux seront ramassés et notés.

Écoute

Cliquer sur le lien sous l’image pour écouter l’extrait de l’émission Eurêka (France Culture) du 18 août 2022. eureka eureka Lien vers le podcast

Pierre Mounier-Kuhn est historien, chercheur au CNRS spécialisé dans l’histoire de l’informatique. Il détaille un point-clef de l’histoire de l’invention de l’ordinateur.

Questionnement

Remarque

Les notions travaillées ci-dessous seront réutilisées lors de la prochaine séquence.

  1. Qui a crée l’ENIAC?
  2. Que signifie ENIAC?
  3. Quelle est la problématique de l’ENIAC, identifiée par les concepteurs?
  4. Qu’est-ce que le projet Manhattan et quelle est l’implication de John von Neumann?
  5. Quelle approche propose von Neumann pour pallier les difficultés des calculateurs?
  6. Quel est le projet successeur de l’ENIAC?

QCM - Machine

QCM 01

Pour s’entraîner

  1. CPU signifie
  • Caracteristic Parameters Uniform
  • Central Process Unit
  • Control Processing Unit
  • Counter Period Unity
  • Caracteristic Parameters Uniform
  • Central Process Unit
  • Control Processing Unit
  • Counter Period Unity
  1. Classer ces types de mémoire de la plus rapide (rang 1) à la plus lente (rang 4)
  • registre
  • RAM
  • disque dur
  • mémoire cache
  • registre: directement manipulable par le processeur
  • mémoire cache: garde les résultats qui seront réutilisés
  • RAM: Random Acces Memory, contient les programmes en cours d’exécution (processus)
  • disque dur: stocke les données et les codes des programmes
  1. Compléter le texte:

Le rôle du processeur est d’effectuer un grand nombre de …. On mesure la puissance d’un processeur par sa …. Elle se mesure en …: c’est le nombre d’opérations en une ….

Le rôle du processeur est d’effectuer un grand nombre de calculs. On mesure la puissance d’un processeur par sa fréquence. Elle se mesure en hertz: c’est le nombre d’opérations en une seconde.

  1. Quelles sont les évolutions qu’apportent le modèle de von Neumann?
  • Apparition des écrans
  • La mémoire est plus grande
  • Les machines sont beaucoup plus rapides pour calculer
  • Séparation de l’unité de commande et l’unité arithmétique
  • Un programme est stocké dans la mémoire comme une données
  • Apparition des écrans
  • La mémoire est plus grande
  • Les machines sont beaucoup plus rapides pour calculer
  • Séparation de l’unité de commande et l’unité arithmétique
  • Un programme est stocké dans la mémoire comme une données
  1. Compléter le texte en choisissant la réponse parmi celles proposées:

Charles Babbage a construit une machine analytique au XIX° | XVIII° | XX° siècle, en s’appuyant sur les principes des métiers à tisser. C’est un ancêtre électrique | mécanique | quantique de l’ordinateur actuel. Ada Lovelace | Grace Hopper | Marie Curie produit un bug | algorithme détaillé qui pourrait fonctionner sur la machine. Elle est considérée comme la première bug | programmeuse | mathématicienne.

Charles Babbage a construit une machine analytique au XIX° siècle, en s’appuyant sur les principes des métiers à tisser. C’est un ancêtre mécanique de l’ordinateur actuel. Ada Lovelace produit un algorithme détaillé qui pourrait fonctionner sur la machine. Elle est considérée comme la première programmeuse.

Sous-sections de Assembleur

Langage assembleur

Mach 04

Résumé du cours

Langage machine

Le processeur n’interprète que des signaux électriques représentés par:

  • 0 pas de courant électrique.
  • 1 passage de courant électrique.

On parle de langage binaire. Il est difficile pour l’Homme d’écrire un programme directement en binaire. On utilise alors des symboles mnémoniques qui représentent une instruction compréhensible par le CPU.

Langage assembleur

Le processeur peut:

  • additionner des nombres,
  • comparer des nombres,
  • charger une valeur depuis la mémoire,
  • stocker une valeur en mémoire.

Le code suivant ajoute $3+57$ et garde le résultat dans le registre R0.

ADD R0,#3,#57
HALT
À retenir

En informatique, une instruction:

  • s’écrit sur une ligne,
  • modifie l’état de la mémoire

Le processeur ne peut manipuler que des nombres situés dans les registres (mémoires très rapides, avec des fréquences de fonctionnement similaires au processeur). Pour manipuler des données dans la mémoire vive, il faut d’abord les placer dans les registres.

Pour charger la valeur située à l’emplacement 36 de la mémoire:

LDR R0,36
À retenir

Chaque processeur possède son propre jeu d’instructions. Il n’est pas possible de les connaître par cœur. La documentation est donc un outil indispensable pour le programmeur.

Constructions élémentaires

Mach 05

Résumé du cours

Information

Les instructions ne sont pas à connaître par cœur. Il faut par contre savoir lire la documentation.

Entrée / Sortie

Charger une entrée clavier (un nombre) dans R0

LDR R0, .InputNum

Afficher dans la console de sortie

STR R2, .WriteUnsignedNum

Variable

Référencer un mot mémoire avec une étiquette

LDR R0, monage
HALT
monage: 25

Effectuer un saut conditionnel

MOV R0, #10
MOV R1, #10
// Compare les valeurs de R0 et R1
CMP R0, R1
// Si les valeurs sont égales, saute à la ligne compegal
BEQ compegal 
MOV R2, R0
HALT 
labelegal: 
STR R0, mavaleur
HALT
mavaleur: 5

Répéter une instruction

    MOV R11,#0        //initialise compteur
boucle:
    ADD R11,R11,#1    //incrémente compteur
    CMP R11,#3       //vérifie fin de la boucle
    BNE boucle
    HALT            //sortie de la boucle

Exercices assembleur

Mach 06
Information
  • Ces exercices sont à réaliser en autonomie.
  • Écrire d’abord les programmes sur papier, puis utiliser le simulateur https://edurl.fr/simul
  • La correction est fournie.

Exercice 1

Écrire un programme qui:

  • stocke deux entiers dans la mémoire vive avec les labels val1 et val2,
  • échange ses deux valeurs.
      LDR R1, val1
      LDR R2, val2
      STR R1, val2
      STR R2, val1
      HALT
val1: 10
val2: 12

Exercice 2

Écrire un programme qui:

  • stocke dans la mémoire vive les coordonnées $x=5$ et $y=4$ d’un personnage.
  • modifie chaque coordonnée de 3 unités.
LDR R0, x
ADD R0, R0, #3
STR R0, x
LDR R1, y
ADD R1, R1, #3
STR R1, y
HALT
x: 5
y: 4

Exercice 3

  1. Décrire le rôle de ce programme. Il faudra décrire le déroulé des instructions, mais également donner le rôle général du programme.
  2. Tester le programme dans le simulateur. Proposer deux tests possibles afin de vérifier tous les cas de figure.
      MOV R2,#question 
      STR R2, .WriteString
      LDR R1,.InputNum
      CMP R1,#18
      BLT moins
      MOV R2,#texteplus
      STR R2, .WriteString
      HALT
moins:
      MOV R2,#textemoins
      STR R2, .WriteString
      HALT
question:.ASCIZ "Quel est votre âge?"
textemoins: .ASCIZ "Vous êtes mineur."
texteplus: .ASCIZ "Vous êtes majeur."

Le programme demande l’âge et vérifie si la personne est mineure ou majeure.

  • lignes 1-2: La question “Quel est votre âge?” est posée
  • ligne 3: Attente de l’âge et stockage dans R1
  • ligne 4: Comparaison entre l’âge et 18
  • ligne 5: Si l’âge est strictement inférieur à 18, sauter à la ligne 9
  • lignes 6-7: Afficher “Vous êtes majeur”.
  • lignes 10-11: Afficher “Vous êtes mineur.”

Exercice 4

  1. Stocker deux entiers dans la mémoire, avec les étiquettes val1, val2.
  2. Écrire un programme qui compare les valeurs dans val1 et val2 et stocke la plus grande valeur dans la variable resultat.
    LDR R1,val1
    LDR R2,val2
    CMP R1,R2
    BGT v1plusgrand //R1 est le plus grand
    // R2 est le plus grand
    STR R2,resultat
    HALT
v1plusgrand:
    STR R1,resultat
    HALT
val1: 13
val2: 5
resultat: 0

comparer comparer

Exercice 5

On souhaite écrire un programme qui implémente l’algorithme suivant:

  • Demander la largeur du rectangle.
  • Demander la longueur du rectangle.
  • Calculer le périmètre du rectangle.
  • Afficher le périmètre du rectangle.

Remettre les instructions suivantes dans l’ordre afin d’implémenter l’algorithme précédent.

largeur:.ASCIZ "Quelle est la largeur?"
      STR R1, .WriteString
      ADD R4,R2,R2
      HALT
longueur: .ASCIZ "Quelle est la longueur?"
      MOV R1,#perimetre 
      STR R4, .WriteUnsignedNum
      MOV R1,#largeur 
      MOV R1,#longueur 
      STR R1, .WriteString
      LDR R3,.InputNum
      ADD R4,R4,R3
      ADD R4,R4,R3
      STR R1, .WriteString
      LDR R2,.InputNum
perimetre: .ASCIZ "Le périmètre est: "
      MOV R1,#largeur 
      STR R1, .WriteString
      LDR R2,.InputNum
      MOV R1,#longueur 
      STR R1, .WriteString
      LDR R3,.InputNum
      ADD R4,R2,R2
      ADD R4,R4,R3
      ADD R4,R4,R3
      MOV R1,#perimetre 
      STR R1, .WriteString
      STR R4, .WriteUnsignedNum
      HALT
largeur:.ASCIZ "Quelle est la largeur?"
longueur: .ASCIZ "Quelle est la longueur?"
perimetre: .ASCIZ "Le périmètre est: "

Exercice 6

  1. Écrire et exécuter le code suivant:
MOV R0,#16
LSR R1, R0,#1
LSR R2, R0,#2
LSR R3, R0,#3
HALT
  1. Comprendre le fonctionnement de l’instruction LSR.

L’instruction LSR effectue des divisions successives par 2.

LSR R3, R0,#3

La valeur 3 indique le nombre de division par 2.

Exercice 7

Écrire un programme qui :

  • demande un nombre à l’utilisateur parmi les puissances de 2 (2, 4, 8, 16, 32, …),
  • compte le nombre de fois où on doit diviser ce nombre par 2 pour obtenir 1.
      MOV R12,#0        //nombre de divisions
      LDR R1,.InputNum  //choix du nombre
boucle:
      LSR R1,R1,#1      //divise par 2
      ADD R12,R12,#1    //incrémente compteur
      CMP R1,#1         //fin de boucle?
      BNE boucle
      STR R12, .WriteUnsignedNum //affiche la valeur
      HALT

Exercice 8

  • On souhaite écrire un programme qui demande à 10 élèves, leur durée du trajet lycée-maison (en minutes) et compte le nombre d’élèves dont le trajet dépasse 60 minutes.
  • À la fin le programme affichera ce nombre en sortie.
  • Ce nombre devra également être sauvegardé dans la mémoire vive de la machine.

Remettre les instructions dans l’ordre, afin de réaliser le programme.

      HALT
boucle:
      BNE boucle        
augmentecompteur:
      ADD R2,R2,#1      
      MOV R0,#0         //initialise le compteur
      LDR R1,.InputNum
      CMP R1,#60
      BLT augmentecompteur 
      ADD R0,R0,#1
      CMP R0,#10
      STR R2,.WriteUnsignedNum 
      MOV R2,#0         //initialise le nombre de durée
      STR R2,120       
      MOV R0,#0         //initialise le compteur
      MOV R2,#0         //initialise le nombre de durée
boucle:
      LDR R1,.InputNum
      CMP R1,#60
      BLT augmentecompteur // la valeur est <60: on ne la compte pas
      ADD R2,R2,#1      //compte la valeur
augmentecompteur:
      ADD R0,R0,#1
      CMP R0,#10
      BNE boucle        // tant qu'on n'a pas fait 10 tours
      STR R2,120        // stockage en mémoire
      STR R2,.WriteUnsignedNum // affichage
      HALT

Exercice 9

Pour faciliter le travail des enseignants, on se propose de construire un programme qui permet de calculer la moyenne des notes d’un élève.

Le programme devra:

  • demander à l’utilisateur de rentrer huit notes,
  • calculer la somme des notes,
  • calculer la moyenne,
  • afficher la moyenne.
    MOV R0,#0         //somme des notes
    MOV R12,#8        //nombre de notes
    MOV R11,#0        //compteur
bouclenote:
    LDR R1,.InputNum
    ADD R0,R0,R1      //ajoute note
    ADD R11,R11,#1    //incrémente compteur
    CMP R11,R12       //fin de boucle?
    BNE bouclenote
    LSR R0,R0,#3      //calcule moyenne
    STR R0,.WriteUnsignedNum
    HALT