Niveau : 1ère générale, enseignement de spécialité NSI
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).
Fonction | Symbole | symbole IEC | Table de vérité | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NON Elle inverse l'état logique de son entrée : |
|
|||||||||||||||||
ET La sortie est vraie que si a et b sont vrais : |
|
|||||||||||||||||
OU La sortie est vraie si a ou b sont vrais : |
|
|||||||||||||||||
OU Exclusif ou XOR La sortie est vrai si a ou b sont vrais mais pas si a et b sont vrai : |
|
Exercice : placez les portes logiques pour réaliser la fonction S = a.(b+c)
a | S | |||
b | ||||
c |
Remplir la table de vérité ci-dessous :
c | b | a | S1 | S2 | S |
---|---|---|---|---|---|
0 | 0 | 0 | ? | ? | ? |
0 | 0 | 1 | ? | ? | ? |
0 | 1 | 0 | ? | ? | ? |
0 | 1 | 1 | ? | ? | ? |
1 | 0 | 0 | ? | ? | ? |
1 | 0 | 1 | ? | ? | ? |
1 | 1 | 0 | ? | ? | ? |
1 | 1 | 1 | ? | ? | ? |
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 if | Ré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
Ex1 : Déterminer les opérations logiques réalisées sur deux octets
|
|
|
|
Ex2 : Additionneur binaire logique
Remplir la la table de vérité ci-dessous pour réaliser une addition binaire avec retenue
b1 | b0 | Somme | Retenue |
---|---|---|---|
0 | 0 | ? | ? |
0 | 1 | ? | ? |
1 | 0 | ? | ? |
1 | 1 | ? | ? |
b0 b1 |
S R | ||
Ex3 : Transcodage UTF-8 -> ISO-8859-1
ISO-8859-1 | caractère | UTF-8 |
7A | z | 7A |
7F | DEL (Delete) | 7F |
A3 | £ | C2 A3 |
BC | ¼ | C2 BC |
BD | ½ | C2 BD |
BE | ¾ | C2 BE |
BF | ¿ | C2 BF |
C0 | À | C3 80 |
C1 | Á | C3 81 |
C2 | Â | C3 82 |
E6 | æ | C3 A6 |
L'extrait de la table montre que le code UTF-8 est codé sur 2 octets pour les caractères étendus (supérieurs à 0x7F) alors que le code ISO-8859-1 est codé sur 1 octet
Methode de transcodage :
Prenons le code UTF-8 du caratère ½ codé C2 BD, il suffit de recopier l'octet de droite.
Pour les caractères commençant par C3 voici la méthode :
On masque le quatet de poids faible de C3 en effectuant une fonction ET
logique avec 0xF0, avec ce résultat obtenu, on fait une fonction OU logique avec le deuxième octet
Exemple pour transcoder en ISO-8859-1 le caractère æ codé C3 A6 en UTF-8
code hexa | Binaire | |||||||
---|---|---|---|---|---|---|---|---|
C3 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
F0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
C3 et F0 = | ? |
? |
? |
? |
? |
? |
? |
? |
ou A6 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
? |
? |
? |
? |
? |
? |
? |
? |
Ex4 : On donne le tableau suivant permettant de connaître le code opération de l'UAL :
b2 | b1 | b0 | opération |
---|---|---|---|
0 | 0 | 0 | NON |
0 | 0 | 1 | OU |
0 | 1 | 0 | ET |
0 | 1 | 1 | XOR |
1 | 0 | 0 | + |
1 | 0 | 1 | - |
1 | 1 | 0 | / |
1 | 1 | 1 | * |
Résoudre les calculs proposés à l'UAL et positionner les drapeaux :
|
|
|
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.
En observant l'animation, remplir compléter la table de vérité
R | S | Q | Q |
---|---|---|---|
1 | 0 | ? | ? |
0 | 0 | ? | ? |
0 | 1 | ? | ? |
0 | 0 | ? | ? |
1 | 1 | ? | ? |
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
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é
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 !
En 1969, dans l'usine IBM de Corbeil-Essonnes, le directeur technique montre les différentes étapes de miniaturisation des composants de l'ordinateur franchies en dix ans, avec l'utilisation du transistor et du circuit intégré.
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 :
D | H | Q |
---|---|---|
0 | 1 | ? |
0 | 0 | ? |
1 | 0 | ? |
1 | 1 | ? |
1 | 0 | ? |
0 | 0 | ? |
0 | 1 | ? |
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.
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 :
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.
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).
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ésultat | Flags NZCV |
---|---|---|
0xD000 + 0xDD00 | 0x | 0b |
0xA200 + 0xDD00 | 0x | 0b |
0x2200 ET 0xDD00 | 0x | 0b |
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 : Réaliser un programme qui compte le nombre de fois qu'une lettre déterminée à l'avance se trouve dans votre prénom
Contenu sous licence CC BY-NC-SA 3.0
Pascal Hassenforder 04/04/2021
Mise à jour du 09/11/2022