NUMERIQUE ET SCIENCES INFORMATIQUES

Niveau : 1ère générale, enseignement de spécialité NSI

 

D
É
C
O
N
N
E
C
T
É

CHAPITRE 2 - AU COEUR DE L'ORDINATEUR

C'est en 1847, que le mathématicien Georges Boole publia son livre "sort Mathematical Analysis of Logic". C'est de cette série de travaux que l'algèbre de Boole vit le jour.

En 1966, dans le centre de calcul de La Gaude (IBM), le directeur présente un ordinateur, machine de grande taille, qui permet d'effectuer des calculs et des opérations logiques de façon extrêmement rapide (souce ina.fr).

1 - Les fonctions logiques combinatoires :

FonctionSymbolesymbole IECTable de vérité

NON

Elle inverse l'état logique de son entrée :

S= a

aS
0
?
1
?


ET

La sortie est vraie que si a et b sont vrais :

S = a.b

abS
00
?
01
?
10
?
11
?


OU

La sortie est vraie si a ou b sont vrais :

S = a+b

abS
00
?
01
?
10
?
11
?


OU Exclusif ou XOR

La sortie est vrai si a ou b sont vrais mais pas si a et b sont vrai :

S = a⊕b

abS
00
?
01
?
10
?
11
?

1.1 - Association de portes logiques

Exercice : placez les portes logiques pour réaliser la fonction S = a.(b+c)

aS

b

c

Remplir la table de vérité ci-dessous :

cbaS1S2S
000
?
?
?
001
?
?
?
010
?
?
?
011
?
?
?
100
?
?
?
101
?
?
?
110
?
?
?
111
?
?
?

On peut faire le parallèle en programmation, avec l'instruction if en python contenant plusieurs conditions :

Exemple : les variables contiennent les entiers suivant : a=5, b=10 et c=-5. Indiquer dans le tableau le résultat du test : vrai =1 faux = 0

Test ifRésultat
a>3 and b<10 or c<0
?
a==5 and b<0 or c==0
?
a>3 and b>5 or c<0
?
a>3 and (b<5 or c>0)
?

Le microprocesseur possède une UAL (unité arithmétique et logique) qui lui permet de faire des calculs.

Un code opération binaire, va définir s'il s'agit d'un calcul arithmétique (+, -, *, etc..) ou d'une opération logique (ou, et, décalage à gauche, etc...).

Le résultat de l'opération pourra être stocké dans la mémoire RAM ou dans des registres internes du microprocesseur. Des drapeaux sont positionnés selon que le résultat de l'opération est nul, négatif, ou qu'il présente un débordement ou une retenue

1.2 Exercices :

Ex1 : Déterminer les opérations logiques réalisées sur deux octets

Octet 1 11110101
Opération 1
Octet 2 01011101
Résultat01010101
Octet 1 11110101
Opération 2
Octet 2 01011101
Résultat10101000
Octet 1 11110101
Opération 3
Octet 2 01011101
Résultat11111101
Octet 1 11110101
Opération 4
Résultat00001010

Ex2 : Additionneur binaire logique

Remplir la la table de vérité ci-dessous pour réaliser une addition binaire avec retenue

b1b0SommeRetenue
00
?
?
01
?
?
10
?
?
11
?
?



b0

b1


S






R

Ex3 : On donne le tableau suivant permettant de connaître le code opération de l'UAL :

b2b1b0opération
000NON
001OU
010ET
011XOR
100+
101-
110/
111*

Résoudre les calculs proposés à l'UAL et positionner les drapeaux :

  • N = 1 si le résultat est négatif (Negative)
  • Z = 1 si le résultat est nul (Zero)
  • C = 1 s'il y a une retenue après le 8ème bit (Carry)
  • V = 1 s'il y a un dépassement de capacité : le signe des opérandes diffère du résultat (Overflow)
Octet 1 11010000
Octet 2 11011101
Opération 1 : 100(2)
Résultat 1
?
?
?
?
?
?
?
?
NZCV
Drapeaux 1
?
?
?
?
Octet 2 00100010
Octet 3 11011101
Opération 2 : 010(2)
Résultat 2
?
?
?
?
?
?
?
?
NZCV
Drapeaux 2
?
?
?
?
Octet 4 10100010
Octet 5 11011101
Opération 3 : 100(2)
Résultat 3
?
?
?
?
?
?
?
?
NZCV
Drapeaux 3
?
?
?
?

1.3 - Additionneur 2 bits avec retenue :

Le schéma logique ci-dessous permet d'additionner E1+E2+Cin

Remplir la table de vérité

E1 E2 Cin S Cout
0 0 0
?
?
0 0 1
?
?
0 1 0
?
?
0 1 1
?
?
1 0 0
?
?
1 0 1
?
?
1 1 0
?
?
1 1 1
?
?

A l'aide du logiciel Logisim, reproduire le schéma logique puis simuler le fonctionnement pour vérifier la table de vérité

1.4 - Additionneur binaire de 2 quartets

Charger le fichier Additionneur4bits et simuler le fonctionnement

Remplir la table ci-dessous

B1 Hexa B2 Hexa Cout3 S3 S2 S1 S0 Affichage
0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 02
0 1 1 1 0 0 1 0
?
?
?
?
?
1 1 1 1 1 1 0 1
?
?
?
?
?

Expliquer comment on est passé du schéma de l'additionneur deux bits avec retenue à l'additionneur de 2 quartets


Le microprocesseur est composé de ces portes logiques, réalisées avec des transistors : c'est l'architechture de von Neuman, matématicien et physicien américono-hongrois. Cette structure permet d'effectuer les calculs mathématiques et logiques sur plusieurs octets. Selon l'article du site 01net.com, IBM a développé une puce composée de 30 milliards de transistors sur une surface aussi grande qu'un ongle. Le premier microprocesseur d'Intel, le 4004, intégrait en 1971 seulement... 2300 transistors !


2 - Logique séquentielle

En logique combinatoire, la sortie ne dépend que des entrées, en logique séquentielle, l'entrée peut dépendre de l'état précédent d'une sortie.

2.1 - La bascule RS

Animation bascule RS

En observant l'animation, remplir compléter la table de vérité

RSQQ
10
?
?
00
?
?
01
?
?
00
?
?
11
?
?

Que remarque-t-on ?


Ce type de bascule permet de mémoriser l'état d'un bit, on l'appelle mémoire unitaire. Avec 8 bascules on pourrait mémoriser un octet

2.2 - Mémorisation d'un état logique

Le microprocesseur utilise la mémoire RAM pour y stocker les résultats des calculs sous forme binaire. La bascule D, dont le schéma est donné ci-dessous, permet de mémoriser l'état d'un bit par validation d'une horloge H.

Complétez la table de vérité ci-dessous sans simuler le montage :

DHQ
01
?
00
?
10
?
11
?
10
?
00
?
01
?

Saisir le schéma dans Logisim, simuler le fonctionnement et vérifier la table de vérité.

REMARQUE : Lorsque l'entrée H est à 0, la sortie Q mémorise l'état précédent.

Ce principe est utilisé par la mémoire du microprocesseur (RAM) pour y stocker les informations binaires. Pour mémoriser un octets, il faut 8 bascules D actionnés par la même horloge H.

2.3 - Accès mémoire

Les octets de la mémoire RAM sont empilés et accessibles par une adresse unique. C'est le microprocesseur qui va placer un mot binaire sur son bus d'adresse afin d'accéder aux cases mémoire souhaitées.

Télécharger le fichier Ram.circ et ouvrez-le avec Logisim

Pour écrire la donnée 01 dans la case mémoire se trouvant à l'adresse 00, procédez comme suit :

  • Mettre tous les bits du bus d'adresse à 0
  • Mettre la broche Select à 1
  • Mettre sur le bus de données 0000 0001
  • Donner un coup d'horloge H : 0 à 1 puis 1 à 0
  • Continuez ainsi pour remplir La RAM avec les octets de l'image ci-dessus

    Mettre la RAM en lecture pour parcourir les données de la mémoire

    Quelle donnée se retrouve dans RAM[4]= 0x ça vous rappelle quelque chose ?

    Ajouter un compteur 8 bits (Memory - Counter) actionné par deux boutons poussoirs H et RESET

    Mettre les broches select et Lire à 1 puis actionner H et RESET pour comprendre le fonctionnement

    Compléter le programme en langage Python qui aurait le même comportement que notre schéma : lire la RAM de 0 à 0x0B


     
    				

    Remarque : dans la RAM du PC il peut probable que les données seront stockées à l'adresse 0, mais il suffit de connaitre l'adresse du pointeur de départ de notre liste pour incrémenter le compteur.

    3 - Langage assembleur

    Le langage assembleur est un langage de bas niveau et se limite à un jeu d'instructions réduit : RISC (Reduced instruction set computing). C'est tout l'opposé d'un langage comme python qui est un langage de haut niveau et fait abstraction de tous les registres et drapeaux d'états lors de la programmation. Le but de cet exercice est dedérouler l'exécution d'une suite d'instructions simple en langage machine.

    Nous allons utiliser un simulateur en ligne développé par Peter L Higginson. Il va permettre d'exécuter les instructions et est basé sur l'architecture de von Neumann (portes logiques à transistors) : Simulateur

    On y trouve une mémoire RAM, une UAL (Unité Arithmétique et Logique) des registres permettant de stocker des valeurs temporaires, un décodeur d'opérations et un registre d'état statut (N:Négatif, Z:Zéro, V:débordement, C:retenue).

    3.1 - Simulation d'une addition entre deux registres

    Copier-coller le code suivant dans la fenêtre accueillant le code assembleur

    Cliquer sur la liste déroulante option et sélectionner hex, cliquez ensuite sur le bouton submit puis RUN

    Relever les valeurs de R0= R1= R2= , le résultat doit être R2 = R0 + R1

    Mofifier le programme afin de faire un ET logique (AND) entre R0 et R1 puis relever les valeurs suivantes:

    R0= R1= R2= Flag NZCV=

    Pourquoi le drapeau Z est-il à 1 ?

    On peut simuler les instructions input et print de python avec le code suivant :

    Dans la partie cours nous avons positionné des drapeaux selon le calcul effectué sur un octet. Or le simulateur fonctionne avec une UAL et une mémoire RAM de 16 bits. Pour les vérifier nos résultats, on décale l'octet de 8 bits vers la gauche en complétant l'octet de le poids faible par des 0.

    ex : 1101 0000 (0xD0) devient 1101 0000 0000 0000 (0xD000)

    Pour accélérer l'exécution du simulateur sélectionner "def execute" dans la liste des options.

    Effectuer les calculs suivants avec le simulateur :

    Calcul RésultatFlags NZCV
    0xD000 + 0xDD000x 0b
    0xA200 + 0xDD000x 0b
    0x2200 ET 0xDD000x 0b

    3.2 - Ecriture et lecture dans la RAM de plusieurs octets

    On désire stocker dans la mémoire les codes ASCII correspondant au lettres de votre prénom. Créer un programme python permettant d'afficher les codes ASCII d'une chaîne de caractères.

    Modifier le programme ci-dessous permettant d'afficher le code ASCII de n'importe quelle chaîne de caractères, quelle que soit sa longueure, à l'aide d'une boucle while puis d'une boucle for. Remplacez la chaîne de caractères par votre prénom


     
    				

    Modifier ce programme pour stocker à partir de l'adresse 200 les codes ascii des lettres composant votre prénom, puis le faire afficher entièrement.


    Chalenge : Ajouter au programme la possibilité de compter le nombre de fois qu'une lettre prédéterminée à l'avance (code ASCII) se trouve dans votre prénom.

    Exemple : le programme doit afficher : PASCAL 2 si je compte le nombre de A qu'il y a dans PASCAL

    Fond :  Texte :  Tables :  Thème du langage: