M
Myrdinn
Invité
Voici le deuxième post de la série
Si vous avez manqué le premier vous pourrez le trouver et lire ici
Je vais faire un rapide résumé de ce que vous avez besoin pour suivre les prochains posts.
Les parties sont loins d'être exhaustives. Si vous voulez ou avez besoin de plus de détails je donnerais des liens ou répondrais a vos questions suivants les demandes.
Le but n'est pas de vous initiez à l'informatique ni de faire de vous un programmeur en assembleur
Les premiers points ne sont pas essentiels mais comprendre le fondement et la structure physique qui ont batit les contraintes et les bases de l'assembleur c'est toujours profitable.
1) Algébre booléenne et opérateur Logique
Je n'aborderais que les bases de l'algèbre booléen. A lui tout seul, il est souvent le sujet d'un livre entier . Cependant je suis toujours dispo pour plus de précision.
La logique booléenne est la base des opérations des ordinateurs modernes binaires. On peut représenter n'importe quel algorythme ou n'importe quel circuit electronique informatique en utilisant un système d'équations/opérations booléene.
Bon maintenant un peu de mathématique et de définition . Pas la peine de suivre complétement ou de retenir (je la mets en size1 exprès), mais comme on manipulera souvent les bits en assembleur nous aurons certainement besoins de cette partie surtout quand vous travaillerez seul
L'algèbre booléen est un système mathématique ou toute les valeurs sont limitées à 0 ou 1 (Respectivement Faux et Vrai)
Un opérateur booléen accèpte des booléens en entrée et produit une seule valeur booléene en sortie. Des exemples d'opérateur sont AND(et) OR (ou) et NOT(Non). Ils agissent de la même manière que leur équivalent linguistique
Exemple (O AND 1) est l'équivalent de (Faux ET Vrai) (Une phrase qui contient un élément vrai et un faux est une phrase Fausse )
Donc 0 AND 1 = 0
Dans ce système il faut tenir compte des postulats suivants Appelons A et B des variables Booléenes (Donc ayant pour valeur 0 ou 1) et x un opérateur
P1) Closure. Tout opérateur est "clos" (Tiissa me dira si c'est le bon terme ) si il produit un résultat booléen à partir
d'une paire de booléen en entrée
P2) Commutativité. Un opérateur x est commutatif si AxB = BxA pour toute valeur de A et B
p3) Assiociativité. Un opérateur x est associatif si (AxB)xC=Ax(BxC)
p4) Ditribution. 2 opérateurs x et y sont ditributifs si Ax(ByC)=(AxB)y(AxC)
p5) Identité. Une valeur booléene I est un élément d'identité pour un opérateur x donné si AxI=A
p6) Inverse. Une valeur booléene I est un élément inverse pour un opérateur x donné si AxI=NOT(A) ou encore B ou B<>A pour toute valeur de A et B comme tous les autres Postulats
Suivent ensuite d'autres postulats.
P1) L'Algèbre Booléenne est limitée au opérateur AND OR et NOT (tous les autres opérateurs sont des combinaisons de ces 3)
P2) L'identité pour AND est1 et l'identité pour OR est 0. Pour NOT il n'y a pas d'identité
P3) AND et OR sont commutatifs
P4) AND et OR sont respectivement Distributifs. A AND (B OR C)= (A AND B) OR (A AND C) idem en inversant OR et AND
P5) AND et OR Sont respectivements Associatifs
P6) Pour toute valeur A il existe une valeur NOT(A) tel que A AND (NOT(A))=0 et A OR (NOT(A))=1. C'est d'ailleurs la définition du compélment logique NOT (O est le NOT(1) et 1 est le NOT(0) )
Ces postulats servent à prouver les théorèmes suivant (Je vous epargne la démonstration)
Th1) A OR A = A
Th2) A AND A = A
Th3) A OR 0 = A
Th4) A AND 1 = A
Th5) A AND 0 = 0
Th6) A OR 1= 1
Th7) NOT(A OR B)= NOT(A) AND NOT(B)
Th8) NOT(A AND B)= NOT(A) OR NOT(B)
Th9) A OR (A AND B) = A
Th10) A AND (A OR B) = A
Th11) A OR (Not(A) AND B) = A OR B
Th12) NOT(A) AND (A OR NOT(B)) = NOT(A) AND NOT(B)
Th13) (A AND B) OR (A AND NOT(B)) = A
Th14) (NOT(A) OR NOT(B)) AND (NOT(A) OR B) = NOT(A)
Th15) A OR NOT(A) = 1
Th16) A AND Not(A) = 0
Bon évidemment pas la peine de retenir tout ça, mais ca pourra vous servir.
Par contre il vous faut retenir les table de vérité suivantes.
C'est la base de toute fonction booléenne. Vous aurez compris que on choisit une ligne et une colonne suivant les 2 valeurs en entrée et que leur intersection est le résultat de l'opération AND et OR comme le nom du tableau l'indique.
Venons en aux fonctions booléene. Une fonction est une suite d'opération booléene. Par exemple il existe une fonction F qui fait
l'opération suivante sur les Variable A B et C F= (A AND B) OR C.
Pour n Variable en entrée il existe 2 a la puissance 2 puissance n Fonctions différentes (Il en existe autant que vous voulez mais au final il ne peut y avoir que 2^2^n résultats possibles). Pour 2 variable A et B il existe 16 Fonctions que je me dois d'énumérer car nous les utiliserons fréquemment. (Si vous insister je vous dirais comment trouver les numéros mais ca sera pour une autre fois)
LEs 16 (2^2^2) résultats possibles pour les fonctions Fx(AB) sont
F0 Fonction ZERO ou EFFACEMENT. Le resultat est toujours ZERO
F1=NOR equivalent de NOT(A OR B)
F2=INHIBITION de B AND NOT(A) correspond à B>A ou A<B
F3=NOT(A) et donc ignore toujours B
F4=INHIBITION de A AND NOT(B) équivalent à B<A ou A>B
F5=NOT(B) et donc ignore toujours A
F6=XOR(Exclusive OR) équivalent de A<>B
F7=NAND NOT(A AND B)
F8=AND
F9=EQUIVALENCE c'est à dire A=B
F10=COPY B ou encore =B et donc ignore A
F11=IMPLICATION B implique A. Donne Si B Alors A ou encore B>=A
F12=COPYA=A donc ignore B
F13=IMPLICATION A implique B. Donne Si A Alors B ou encore A>=B
F14=OR
F15=1 ou SET. Resultat=1 quelques soit A ET B
Je vous laisse deviner tous seul les différentes utilisations des opérateurs qui mêne à ces résultat a partir de A et B en entrée
Bon c'est bien joli mais quel est le rapport avec les ordinateurs???
C'est le prochain chapitre de ce même post
2) Les circuits Electroniques
Il y a une correpondance directe (1 pour 1) entre les circuits electroniques et les fonctions booléenes. Pour chacune des fonctions vous pouvez construire un circuit electronique et vice Versa. Comme nous l'avons vu on peut tout construire seulement avec des circuits AND OR et NOT. En réalité un seul circuit suffit c'est le circuit NAND(Fonction F7) ce qui permet une unification et miniaturisation des circuits.
Pour vous prouvez que l'on peut créer n'importe quel fonction il suffit de prouver que l'on peut faire des AND OR et NOT à partir de NAND.
NOT a partir de NAND. Il suffit de mettre 2 fois la même variable en entrée puisque l'on obtient NOT (A AND A)= NOT(A)
AND a partir de NAND. A AND B et equivalent à (NAND AB) NAND (NAND AB) Donc il suffit de combiner 2 circuits NAND en serie
OR à Partir de NAND. Bon la c'est pas aussi trivial il faut appliquer le Théorème de DeMorgan (Th7)
NOT(A OR B)=NOT(A) AND NOT(B).
A OR B= NOT(NOT(A) AND NOT(B)) l'inverse est vrai, il suffit de remplacer chaque coté par son NOT.
A OR B= NAND(NOT(A)NOT(B)) en appliquant la définition de NAND (Cf Fonction 7).
La même chose en image
Les circuits combinatoires
Ces circuits combinent différentes opérations booléenes de bases (OR,AND,NOT) avec quelques entrées et sorties. Chaque sortie
correspond à une fonction, et donc chaque circuit représente autant de fonction qu'il à de sortie pour un nombre limité d'entrée.
Un processeur est constitué d'un très grand nombre de différents circuits combinatoires.
Je ne m'étendrais pas sur ce point car la compléxité des processeurs fait que je vous noierais dans des détails insignifiant, de plus mes capacités au fur et à mesure que l'on avance dans les générations de processeurs seraient très vite dépassées. Cependant plus loin dans le post ou au cours d'un trace je n'hesiterais à vous donner quelques exemples précis si j'en ai l'occasion
Revenons aux circuits combinatoires car j'en ai besoin pour la suite. Le problème d'un circuit de base c'est qu'il n' a pas de mémoire. Il est dynamique une fois le calcul effectué, l'information continue sont circuit mais n'est jamais stoquée. C'est la qu'il faut faire intervenir une horloge et la logique qui va avec. A partir de 2 NAND on peut construire la base de ceci avec un SET/RESET Flip Flop. Je ne vais pas partir dans des détails electriques mais c'est la base qui vous permet en faisant alterner les entrées entre 0 et 1 (L'horloge) de maintenir une valeur.
L'image du bas vous montre le circuit mémoire complet, avec l'horloge(Clk) qui permet de maintenir la valeur Q et le complément qui permet de charger le data dans Q. Si on répète ce circuit 8 fois en parrallèle on obtient le schéma ci dessous. C'est un registre 8 Bit nous en reparleron plus tard.
Une autre utilisation qui vous donne sans doute une image plus parlante de l'interet de garder un signal jusqu'à la prochaine modification. Bien que ce "registre" 7 bits n'est utilisé que pour 10 Valeurs sur 128 possibles
Bien maintenant qu'est ce que ca à a voir avec la programmation? C'est ce que nous allons voir dans le prochain point
Si vous avez manqué le premier vous pourrez le trouver et lire ici
Je vais faire un rapide résumé de ce que vous avez besoin pour suivre les prochains posts.
Les parties sont loins d'être exhaustives. Si vous voulez ou avez besoin de plus de détails je donnerais des liens ou répondrais a vos questions suivants les demandes.
Le but n'est pas de vous initiez à l'informatique ni de faire de vous un programmeur en assembleur
Les premiers points ne sont pas essentiels mais comprendre le fondement et la structure physique qui ont batit les contraintes et les bases de l'assembleur c'est toujours profitable.
1) Algébre booléenne et opérateur Logique
Je n'aborderais que les bases de l'algèbre booléen. A lui tout seul, il est souvent le sujet d'un livre entier . Cependant je suis toujours dispo pour plus de précision.
La logique booléenne est la base des opérations des ordinateurs modernes binaires. On peut représenter n'importe quel algorythme ou n'importe quel circuit electronique informatique en utilisant un système d'équations/opérations booléene.
Bon maintenant un peu de mathématique et de définition . Pas la peine de suivre complétement ou de retenir (je la mets en size1 exprès), mais comme on manipulera souvent les bits en assembleur nous aurons certainement besoins de cette partie surtout quand vous travaillerez seul
L'algèbre booléen est un système mathématique ou toute les valeurs sont limitées à 0 ou 1 (Respectivement Faux et Vrai)
Un opérateur booléen accèpte des booléens en entrée et produit une seule valeur booléene en sortie. Des exemples d'opérateur sont AND(et) OR (ou) et NOT(Non). Ils agissent de la même manière que leur équivalent linguistique
Exemple (O AND 1) est l'équivalent de (Faux ET Vrai) (Une phrase qui contient un élément vrai et un faux est une phrase Fausse )
Donc 0 AND 1 = 0
Dans ce système il faut tenir compte des postulats suivants Appelons A et B des variables Booléenes (Donc ayant pour valeur 0 ou 1) et x un opérateur
P1) Closure. Tout opérateur est "clos" (Tiissa me dira si c'est le bon terme ) si il produit un résultat booléen à partir
d'une paire de booléen en entrée
P2) Commutativité. Un opérateur x est commutatif si AxB = BxA pour toute valeur de A et B
p3) Assiociativité. Un opérateur x est associatif si (AxB)xC=Ax(BxC)
p4) Ditribution. 2 opérateurs x et y sont ditributifs si Ax(ByC)=(AxB)y(AxC)
p5) Identité. Une valeur booléene I est un élément d'identité pour un opérateur x donné si AxI=A
p6) Inverse. Une valeur booléene I est un élément inverse pour un opérateur x donné si AxI=NOT(A) ou encore B ou B<>A pour toute valeur de A et B comme tous les autres Postulats
Suivent ensuite d'autres postulats.
P1) L'Algèbre Booléenne est limitée au opérateur AND OR et NOT (tous les autres opérateurs sont des combinaisons de ces 3)
P2) L'identité pour AND est1 et l'identité pour OR est 0. Pour NOT il n'y a pas d'identité
P3) AND et OR sont commutatifs
P4) AND et OR sont respectivement Distributifs. A AND (B OR C)= (A AND B) OR (A AND C) idem en inversant OR et AND
P5) AND et OR Sont respectivements Associatifs
P6) Pour toute valeur A il existe une valeur NOT(A) tel que A AND (NOT(A))=0 et A OR (NOT(A))=1. C'est d'ailleurs la définition du compélment logique NOT (O est le NOT(1) et 1 est le NOT(0) )
Ces postulats servent à prouver les théorèmes suivant (Je vous epargne la démonstration)
Th1) A OR A = A
Th2) A AND A = A
Th3) A OR 0 = A
Th4) A AND 1 = A
Th5) A AND 0 = 0
Th6) A OR 1= 1
Th7) NOT(A OR B)= NOT(A) AND NOT(B)
Th8) NOT(A AND B)= NOT(A) OR NOT(B)
Th9) A OR (A AND B) = A
Th10) A AND (A OR B) = A
Th11) A OR (Not(A) AND B) = A OR B
Th12) NOT(A) AND (A OR NOT(B)) = NOT(A) AND NOT(B)
Th13) (A AND B) OR (A AND NOT(B)) = A
Th14) (NOT(A) OR NOT(B)) AND (NOT(A) OR B) = NOT(A)
Th15) A OR NOT(A) = 1
Th16) A AND Not(A) = 0
Bon évidemment pas la peine de retenir tout ça, mais ca pourra vous servir.
Par contre il vous faut retenir les table de vérité suivantes.
C'est la base de toute fonction booléenne. Vous aurez compris que on choisit une ligne et une colonne suivant les 2 valeurs en entrée et que leur intersection est le résultat de l'opération AND et OR comme le nom du tableau l'indique.
Venons en aux fonctions booléene. Une fonction est une suite d'opération booléene. Par exemple il existe une fonction F qui fait
l'opération suivante sur les Variable A B et C F= (A AND B) OR C.
Pour n Variable en entrée il existe 2 a la puissance 2 puissance n Fonctions différentes (Il en existe autant que vous voulez mais au final il ne peut y avoir que 2^2^n résultats possibles). Pour 2 variable A et B il existe 16 Fonctions que je me dois d'énumérer car nous les utiliserons fréquemment. (Si vous insister je vous dirais comment trouver les numéros mais ca sera pour une autre fois)
LEs 16 (2^2^2) résultats possibles pour les fonctions Fx(AB) sont
F0 Fonction ZERO ou EFFACEMENT. Le resultat est toujours ZERO
F1=NOR equivalent de NOT(A OR B)
F2=INHIBITION de B AND NOT(A) correspond à B>A ou A<B
F3=NOT(A) et donc ignore toujours B
F4=INHIBITION de A AND NOT(B) équivalent à B<A ou A>B
F5=NOT(B) et donc ignore toujours A
F6=XOR(Exclusive OR) équivalent de A<>B
F7=NAND NOT(A AND B)
F8=AND
F9=EQUIVALENCE c'est à dire A=B
F10=COPY B ou encore =B et donc ignore A
F11=IMPLICATION B implique A. Donne Si B Alors A ou encore B>=A
F12=COPYA=A donc ignore B
F13=IMPLICATION A implique B. Donne Si A Alors B ou encore A>=B
F14=OR
F15=1 ou SET. Resultat=1 quelques soit A ET B
Je vous laisse deviner tous seul les différentes utilisations des opérateurs qui mêne à ces résultat a partir de A et B en entrée
Bon c'est bien joli mais quel est le rapport avec les ordinateurs???
C'est le prochain chapitre de ce même post
2) Les circuits Electroniques
Il y a une correpondance directe (1 pour 1) entre les circuits electroniques et les fonctions booléenes. Pour chacune des fonctions vous pouvez construire un circuit electronique et vice Versa. Comme nous l'avons vu on peut tout construire seulement avec des circuits AND OR et NOT. En réalité un seul circuit suffit c'est le circuit NAND(Fonction F7) ce qui permet une unification et miniaturisation des circuits.
Pour vous prouvez que l'on peut créer n'importe quel fonction il suffit de prouver que l'on peut faire des AND OR et NOT à partir de NAND.
NOT a partir de NAND. Il suffit de mettre 2 fois la même variable en entrée puisque l'on obtient NOT (A AND A)= NOT(A)
AND a partir de NAND. A AND B et equivalent à (NAND AB) NAND (NAND AB) Donc il suffit de combiner 2 circuits NAND en serie
OR à Partir de NAND. Bon la c'est pas aussi trivial il faut appliquer le Théorème de DeMorgan (Th7)
NOT(A OR B)=NOT(A) AND NOT(B).
A OR B= NOT(NOT(A) AND NOT(B)) l'inverse est vrai, il suffit de remplacer chaque coté par son NOT.
A OR B= NAND(NOT(A)NOT(B)) en appliquant la définition de NAND (Cf Fonction 7).
La même chose en image
Les circuits combinatoires
Ces circuits combinent différentes opérations booléenes de bases (OR,AND,NOT) avec quelques entrées et sorties. Chaque sortie
correspond à une fonction, et donc chaque circuit représente autant de fonction qu'il à de sortie pour un nombre limité d'entrée.
Un processeur est constitué d'un très grand nombre de différents circuits combinatoires.
Je ne m'étendrais pas sur ce point car la compléxité des processeurs fait que je vous noierais dans des détails insignifiant, de plus mes capacités au fur et à mesure que l'on avance dans les générations de processeurs seraient très vite dépassées. Cependant plus loin dans le post ou au cours d'un trace je n'hesiterais à vous donner quelques exemples précis si j'en ai l'occasion
Revenons aux circuits combinatoires car j'en ai besoin pour la suite. Le problème d'un circuit de base c'est qu'il n' a pas de mémoire. Il est dynamique une fois le calcul effectué, l'information continue sont circuit mais n'est jamais stoquée. C'est la qu'il faut faire intervenir une horloge et la logique qui va avec. A partir de 2 NAND on peut construire la base de ceci avec un SET/RESET Flip Flop. Je ne vais pas partir dans des détails electriques mais c'est la base qui vous permet en faisant alterner les entrées entre 0 et 1 (L'horloge) de maintenir une valeur.
L'image du bas vous montre le circuit mémoire complet, avec l'horloge(Clk) qui permet de maintenir la valeur Q et le complément qui permet de charger le data dans Q. Si on répète ce circuit 8 fois en parrallèle on obtient le schéma ci dessous. C'est un registre 8 Bit nous en reparleron plus tard.
Une autre utilisation qui vous donne sans doute une image plus parlante de l'interet de garder un signal jusqu'à la prochaine modification. Bien que ce "registre" 7 bits n'est utilisé que pour 10 Valeurs sur 128 possibles
Bien maintenant qu'est ce que ca à a voir avec la programmation? C'est ce que nous allons voir dans le prochain point