|
Rubriques
connexes
|
|||||||||||||||||||||||
|
|
|||||||||||||||||||||||
PAGE
EN
CONSTRUCTION
UC
Rappelons que l'Unité
Centrale ou "Processeur"
est la partie d'un ordinateur permettant d'effectuer pratiquement toutes les
opérations sur les données mises en mémoire ou acquises
de l'extérieur..
Elle lit séquentiellement la nature et l'ordre des opérations
à effectuer
dans un programme constitué de codes binaires en mémoire
appelés instructions.
Les premières unités centrales étaient des
comprexes électroniques de grande taille situés dans les ordinateurs.
Les UC actuelles sont matériellement constituées par un circuit
intégré.
Pour les ordinateurs de petite taille, on les appelle "microprocesseurs".
Registres
On appelle
registres les supports matériels dans lesquels on enregistre
plus ou moins provisoirement des données binaires.
Les "mémoires" sont des ensembles ordonnés
de registres.
La principale
caractéristique des registres est leur taille en bits.
Les unités centrales possèdent un nombre limité de registres
internes
de diverses tailles adaptées aux formats des données
qu'ils sont, chacun d'eux, appelés à traiter.
Généralement, des tailles multiples de 8 ou de 16 bits.
Dans la suite, pour des raisons de clarté des
desins et de l'exposé,
je donnerai des exemples pour des registres à 8 bits seulement.
Les explications sont aisément généralisables à
un nb. qqe de bits.
Le programmeur
devra tenir compte de cette remarque s'il veut réutiliser l'opérande
qui se trouvait dans l'accumulateur.
Dans ce cas, il vaut mieux maintenir l'opérande constant dans le regitre
R1 dont le contenu n'est pas "écrasé" par l'opération
et faire varier celui de l'accumulateur
qui d'ailleurs est d'accès plus rapide.
Codage BCD
C'est un
autre type de codage binaire
facilitant l'affichage des nombres sous forme de digits.
Exemple :
9710 peut s'écrire :
| 0110
00012 en binaire naturel, ou 1001 0111BCD en Décimal Codé Binaire (BCD) |
L'octet BCD est divisé
en deux parties de 4 bits.
à gauche le digit 1001 qui représente le ' 9
' de 97
à droite le digit 0111 qui représente le' 7'
de 97.
Dans beaucoup d'applications, ce format permet
la "sortie" directe de la valeur BCD
sur une batterie d'afficheurs numériques digitaux
à diodes électroluminescentes par exemple.
Dépassement
de capacité d'un registre
Les registres internes de
l'ALU ont un format limité.
Une opération effectuée sur deux opérandes introduits
dans deux regitres
de l'ALU peut se solder par le dépassement de capacité
du registre destiné à
contenir le résultat.
Exemple sur des registres de 8 bits (pour simplifier)
et une addition de deux nombres entiers naturels.
A = 1111 00002
= 24010
B= 0001 00002 =1610
A+B = 1 0000 00002
= 25610
Il y a eu dépassement du registre résultat à 8 bits.
Avec 8 bits on ne peut écrire que 255 au maximum, pas 256.
En conséquence,
l'ALU donne pour résultat 0000 00002
et positionne l'indicateur CF = 1. (carry flag)
Voyez
la notice de votre UC pour le comportement exact.
Report
(retenue) dans une opération
Le débordement de capacité
du registre destiné à recevoir le résultat d'une opération
n'est pas toujours catastrophique.
Il peut servir à effectuer une opération sur des opérandes
ayant un format binaire dépassant la capacité des registres
internes de l'ALU.
Prenons des nombres à 16 bits à traiter par une ALU
dont les registres ne "font" que 8 bits.
On opère alors en deux opérations sucessives commençant
par l'octet de plus faible poids LSB.:
| A = | 0000 0010 1111 00002 = 51210+24010= 752 |
| B = | 0000 0000 0001 00002 = 1610 |
| A+B = | 0000 0011 0000 00002 = 76810 |
Le
"1" en rouge ci-dessus est le
report ou "retenue" produit par la somme des LSB
à ajouter à la somme des deux octets de gauche MSB.
L'indicateur CF
(ou CY selon les UC) permet de vérifier et d'exploiter
les éventuels reports de certaines opérations comme la somme.
Notez la différence avec l'indicateur de dépassement
OV ou OF
non lié à un type d'opération.
Voyez la notice de votre UC pour le comportement
exact.
Parité
d'un nombre binaire
N'a
rien à voir avec le fait qu'il soit pair ou non.
Si un nombre
en représentation binaire compte un nombre pair de "1"
il est dit de "parité paire". Ce qui est aussi le
cas du zéro.
Dans le cas contraire,
c'est un nombre de "parité impaire".
Cette notion de parité prend son importance
dans les calculs de détection et de correction d'erreurs
par exemple dans les transmission de données en milieu perturbé.
Attention !
000000102 = 210 est un nombre pair de parité
impaire !
|
Registre
|
binaire
|
décimal
ss signe
|
décimal
signé
|
|
Rp
=
|
0001
1101
|
29
|
29
|
|
Rq
=
|
1010
1101
|
173
|
-83
|
|
Rp+Rq
=
|
1100 1010
|
202
|
-54
|
Rappel de la représentation
binaire des nombres négatifs.
Dans la convention dite du complément à 2 :
les négatifs commencent par 1 à gauche (MSB = 1).
On obtient l'opposé d'un binaire B en remplaçant tous
ses 1 par des 0 et inversement,
(ce que je symbolise par NOT B) puis on ajoute 1 au résultat.
|
Nombre
|
En
binaire
|
En
décimal
|
|
Rq
=
|
1010
1101
|
= ?
|
|
NOT
Rq =
|
0101
0010
|
.
|
|
-Rq
= NOT Rq +1 =
|
0101
0011
|
=
+83
|
|
+Rq
=
|
.
|
= -83
|
|
(Rp+Rq)
=
|
1100
1010
|
=
?
|
|
NOT(Rp+Rq)=
|
0011
0101
|
.
|
|
NOT(A+B)
+ 1 = -(Rp+Rq)=
|
0011
0110
|
=
+54
|
|
(Rp
+ Rq)=
|
.
|
=
-54
|
Il n'y
a pas deux additions ADD différentes !
La machine exécute de la même manière les binaires signés
ou non.
C'est l'interprétation que vous en faites qui détermine le
résultat.
La machine vous indique par son "sign flag" SF (indicateur de
signe)
le signe du résultat au cas où vous l'interpréteriez
comme une somme signée.
SUB (substract)
Soustraction
Exemple : SUB
Rp,Rq
|
Registre
|
binaire
|
décimal
ss signe
|
décimal
signé
|
|
Rp
=
|
1010
1101
|
173
|
-83
|
|
Rq
=
|
0001
1101
|
29
|
29
|
|
Rp-Rq
=
|
1001 0000
|
144
|
-112
|
Rappel
de la représentation binaire des nombres négatifs.
Dans la convention dite du complément à 2 :
les négatifs commencent par 1 à gauche (MSB = 1).
Explications.
On obtient le positif opposé en remplaçant tous les 1 par
des 0 et inversement,
ce que je symbolise par ( NOT Rp ), puis on ajoute 1 au résultat.
(Pour trouver Rp = - 83 j'ai d'abord calculé l'opposé de Rp)
|
Nombre
|
En
binaire
|
En
décimal
|
|
Rp
=
|
1010
1101
|
?
|
|
NOT
Rp =
|
0101
0010
|
.
|
|
-
Rp = NOT Rp+ 1 =
|
0101
0011
|
=
+83
|
|
+
Rp =
|
.
|
=
-83
|
|
(Rp-Rq)
=
|
1001
0000
|
=
-54
|
|
NOT(Rp-Rq)
=
|
0110
1111
|
.
|
|
-(Rp-Rq)=
NOT(Rp-Rq)+1 =
|
0111
0000
|
=
+112
|
|
+(Rp-Rq)
=
|
.
|
=
-112
|
INC et DEC
Ces instructions
incrémentent ou décrémentent
le registre désigné. Ex. : INC Rp incrémente
Rp
Rappelons qu'incrémenter
signifie
ajouter "1" à la valeur contenue dans un
registre.
Décrémenter c'est soustraire "1"
à la valeur contenue dans un registre.
CMP Rn,Rp
Comparaison des valeurs de deux registres Rn & Rp
Cette instruction effectue une soustraction virtuelle
des valeurs de ces registres
et positionne en conséquence les indicateurs (flags)
0F, SF, ZF, AF, PF, CF.
L'opération est virtuelle en ce sens
qu'aucun des registres n'est modifié.
Mais les valeurs des
indicateurs
donnent tous renseignements sur les valeurs relatives
de ces registres.
Par exemple, si 0F=1 alors Rn = Rp.
|
Rp
=
|
0101
1100
|
|
NOT
Rp =
|
1010
0011
|
NEG
Exemple : NEG Rp
Remplace,
le nombre contenu dans le registre Rp par son opposé.
Attention !
L'écriture des relatifs est conforme à la convention
dite du complément à deux qui est expliquée par ailleurs
dans ce site.
Exemple, dans cette convention,
Rp = 1010
1100 est négatif
car son MSB est "1"
Nous obtenons son opposé en deux opérations :
1° - Changer tous ses bits
2° - ajouter "1"
|
Rp
=
|
1010
1100
|
|
NOT
Rp =
|
0101
0011
|
|
-
Rp = (NOT Rp) + 1 =
|
0101
0100
|
Instruction AND
ET binaire
bit à bit de deux registres
Exemple :AND
Rp,Rq
|
Rp
=
|
0101
1001
|
|
Rq
=
|
0110
1100
|
|
AND
Rp Rq =
|
0100
1000
|
Instruction
OR
OU binaire bit
à bit de deux registres
Exemple :OR
Rp,Rq
|
Rp
=
|
0101
1001
|
|
Rq
=
|
0110
1100
|
|
OR
Rp Rq =
|
0111
1101
|
Instruction
XOR
OU Exclusif binaire
bit à bit de deux registres
Exemple :XOR
Rp,Rq
|
Rp
=
|
0101
1001
|
|
Rq
=
|
0110
1100
|
|
XOR
Rp Rq =
|
0011
0101
|
|
Rotations
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Rotation
à droite du contenu du registre A
Rotation à gauche du contenu du registre A
Rotation à droite du contenu du registre A affectant l'indicateur de report (Carry Flag)
Le bit perdu à droite est réintroduit à gauche et copié dans l'indicateur CF . Rotation à droite du contenu du registre A affectant l'indicateur de report (Carry Flag)
Le bit perdu à gauche est réintroduit à droite et copié dans l'indicateur CF. |
|
Décalages
- (
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Décalage
à droite du contenu du registre A
Le bit qui disparaît à droite est placé dans l'indicateur CF Le bit manquant à gauche est remplacé par 0 Décalage à gauche du contenu du registre A
Le bit qui disparaît à gauche est placé dans l'indicateur CF Le bit manquant à droite est remplacé par 0. |
Langage machine & Assembleur
Le programme
dans lequel l'UC prend ses instructions
est consitué de codes binaires en mémoire. Ex 110001102
C'est le "langage machine" car il n'est facilement compréhensible
que par l'UC.
Il est clair qu'un programmeur aura du mal à écrire un programme
avec de tels codes.
Une expression hexadécimale serait plus claire.
Ex : 110001102 = A616
Mais c'est encore peu "parlant".
Pour rendre le code plus clair à écrire et à lire,
on substitue à ces codes numériques des codes mnémoniques
( ce qui signifie "symboles plus faciles à retenir" )
décrivant plus clairement leurs fonctions.
Par exemple : ADD pour "addition",
SUB (
substract ) pour "soustraction", MUL pour "multiplication",
etc.
Le langage utilisant ces
codes s'appelle "langage assembleur".
Un programme écrit en assembleur est ensuite traduit en codes machine
binaires
par un utilitaire de traduction également appelé "assembleur".
Ces codes sont ensuite chargés en mémoire-programme
par un utilitaire chargeur (
loader).
Des langages plus puissants ont été inventés pour
programmer les UC
tels que "Fortran", "Pascal", "C", "Java"
etc.
Mais l'assembleur reste incontournable pour des procédures
ou très spéciales ou exigeant une grande rapidité d'action.
Notamment en informatique embarquée.
|
|
Unité Artithmétique & Logique ALU |
|
ALU
?
|
||
|
Ce que je propose d'étudier dans la suite:
|
|
1
- Schéma d'une ALU typique
|
|
|
Taille
des registres internes |
|
2-1
Processus général du calcul
|
|
|
|
2-2
Registre d'état
|
|||||||||||||
|
|
3-2
Opérations logiques
|
||||||||||||||||||||||||||
|
|
4°
Quelques exemples d'applications
|
|
|
J'arrête
là pour aujourd'hui |
|
Orientation
|
||||||||||||||||||||||||||
|
|