Page 13.
• La mémoire est un ensemble de cellules, chaque cellule pouvant contenir une
certaine
quantité d'information. À la naissance des micro-ordinateurs le nombre de
cellules était aux
alentours de 340K (lK = 1024), alors qu’à l’heure actuelle, ce nombre est de
plusieurs
centaines de Megs (1 Meg = 1024^2) ou de Gigs (1 Gig = 1024*1024*1024) selon
l'ordinateur.
• À chaque cellule est associée une adresse par laquelle les autres
composantes la désignent.
Ces adresses sont des nombres variant normalement entre 0 et le nombre de
cellules de
mémoire -1. Par exemple, dans une mémoire de 4K, les cellules de mémoire auront
des
adresses allant de 0 à 4095.
• Chaque cellule est composée d'un nombre fixe de bits. Un bit est l'unité
fondamentale
d'information traitée par un ordinateur. Chaque bit peut avoir deux valeurs: 0
ou 1. Une
suite de bits nous permet donc de représenter un nombre binaire, par exemple,
une cellule
de huit bits permet de représenter tous les nombres binaires entre 00000000 et
11111111,
ce qui équivaut à des nombres entre 0 et 255 en base 10. Le nombre de bits par
cellule peut
varier entre 8 et 64 bits selon le modèle d'ordinateur. Une cellule de 8 bits
est appelée un
« octet » (ou byte en anglais).
• Une cellule de mémoire ne peut contenir qu'une seule valeur à la fois, le
stockage d'une
nouvelle valeur détruisant l'ancienne valeur contenue dans la cellule.
3.1 Systèmes de numération
Lire la page 21.
3.1.1 Système binaire
Pour convertir un nombre décimal en son équivalent binaire on doit procéder
par une suite
de divisions par deux en conservant le reste de chaque division, ces restes
constituant les chiffres du
nombre converti (pris en ordre inverse).
Voir les exemples 1, 2 et 3 page 22.
3.1.2 Parties fractionnaires d’un nombre réel
Les nombres fractionnaires ne seront analysés qu'au chapitre 11.
3.1.3 Système hexadécimal
Dans le cas des processeurs modernes, la taille des cellules de
mémoire est un multiple de quatre, on
utilise donc le système hexadécimal. On définit d'abord une table d'équivalence
binaire-hexadécimal
pour les 16
| Binaire | Hexadécimal |
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | A |
| 1011 | B |
| 1100 | C |
| 1101 | D |
| 1110 | E |
| 1111 | F |
Par exemple 1000102
=> 0010 0010 = > 2216
sur 8 bits
101010112
=> 1010 1011 => AB16
sur 8 bits
1000110100101112 => 0100 0110 1001 0111 => 469716
sur 16 bits
Un nombre de 16 bits est représenté par un nombre hexadécimal de 4 chiffres
variant
de 000016 à FFFF16, soit de 0000010
à 6553510.
Inversement, pour convertir un nombre hexadécimal en son
équivalent binaire, il suffit de remplacer
chaque chiffre hexadécimal par son équivalent binaire sur quatre bits.
Exemple: 12F16 => 0001
0010 1111 => 1001011112
2A0316 => 0010 1010 0000 0011 => 101010000000112
Pour convertir des nombres du système hexadécimal au système
décimal, on utilise l'expansion
polynomiale vue plus haut (page 21).
27A16 = 2 x 16^2 + 7 x 16^1 + 10 x 16^0 = 2 x 256 + 7 x 16 + 10 = 63410
4322716 = 4 x 16^4 + 3 x 16^3 + 2 x 16^2 + 2 x 16^1 + 7 x 16^0 = 262144 +12288 + 512 + 32 + 7 = 27498310
Cette méthode est utilisée lors des conversions de binaire à
décimal où l'on passe par la représentation
hexadécimale de façon intermédiaire
101111102 = BE16 = 11 x 16^1 + 14 x 16^0 = l9010
Pour convertir un nombre décimal en un nombre hexadécimal on
utilise une méthode
semblable à celle utilisée pour passer du décimal au binaire. On fait une série
de divisions par 16 en
conservant le reste de chaque division.
Voir les 3 exemples à la page 26.
3.1.4 Exercices à la page 26
10111 110011 101010 10111001
+ 01011 + 011100 + 011111 + 00011001
----- ------ ------ --------
100010 1001111 1001001 11010010
3.1.4.4 Effectuer les soustractions binaires ci-dessous:
100110 111111 101110
110000
- 010110 - 101010 - 011111 - 010111
------ ------ ------ ------
010000 010101 001111 011001
3.1.4.5 Effectuer les additions hexadécimales ci-dessous:
ABCD lEFO AAAA CDEF
+ 4321 + 9042 + OAAA + 1221
---- ---- ---- ----
EEEE AF32 B554 E010
3.1.4.6 Effectuer les soustractions hexadécimales ci-dessous:
34A2 F975 54EA FFFF
- 0191 - 94AE - lEFA - EDCB
---- ---- ---- ----
3311 64C7 35F0 1234
3.X Système Octal (section ajoutée)
Dans le cas d'anciens processeurs, la taille des cellules de
mémoire est un multiple de trois, on
utilise donc le système octal. On définit d'abord une table d'équivalence
binaire-octal
pour les 8
| Binaire | Octal |
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
Par exemple:1000102 => 00 100 010 => 0428
sur 8 bits
101010112 => 10 101 011 => 2338
sur 8 bits
1000110100101112 => 0 100 011 010 010 111 => 0432278
sur 16 bits
Un nombre de 16 bits est représenté par un nombre octal de 6
chiffres variant
de 0000008 à 1777778, soit de 0000010
à 6553510.
Inversement, pour convertir un nombre octal en son équivalent
binaire, il suffit de remplacer
chaque chiffre octal par son équivalent binaire sur trois bits.
Exemple: 1278
=> 01 010 111
=> 010101112
sur 8 bits
0027038 => 0 000 010 111 000 101 =>
00001001110001012 sur 16 bits
Pour convertir des nombres du système octal au système décimal,
on utilise l'expansion
polynomiale vue plus haut (page 21).
2758 = 2 x 8^2 + 7 x 8^1 + 5 x 8^0 = 2 x 64 + 7 x 8 + 5 = 18910
432278 = 4 x 8^4 + 3 x 8^3 + 2 x 8^2 + 2 x 8^1 + 7 x 8^0 = 16384 +1536 + 128 + 16 + 7 = 1807110
Cette méthode est utilisée lors des conversions de binaire à
décimal où l'on passe par la représentation
octale ou hexadécimale de façon intermédiaire
101111102 = 2768 = BE16 = 11 x 16^1 + 14 x 16^0 = l9010
Pour convertir d'octal à hexadécimal ou d'hexadécimal à octal, il suffit de convertir d'abord en binaire:
BE16 = 1011 11102 = 10 111 1102 = 2768
Inversement pour convertir un nombre décimal en un nombre octal on utilise
une méthode
semblable à celle utilisée pour passer du décimal au binaire. On fait une série
de divisions par 8 en
conservant le reste de chaque division.
exemples:
Base Reste
41210 8 4 ^
51 8 3 |
6 8 6 |
0 6348 => 0 000 0110 011 1002149210 8 4 ^
186 8 2 |
23 8 7 |
2 8 2 |
0 27248 => 0 010 111 010 1002
5329010 8 2 ^
6661 8 5 |
832 8 0 |
104 8 0 |
13 8 5 |
1 8 1 |
0 1500528 => 1 101 000 000 101 0102
Effectuer les
additions octales ci-dessous:
002345 00l765 006666 054367
+ 004321 + 005042 + 000222 + 031227
------ ------ ------ ------
006666 007027 007110 105616
Effectuer les soustractions octales ci-dessous:
003472 007775 005412 107000
- 000161 - 006466 - 00l567 - 001001
------ ------ ------ ------
003311 001307 003623 105777
3.Y Particularités (section ajoutée)
3.Y.1 Dépassement de la limite sur 16 bits
En effectuant une opération sur 2 nombres de 16 bits, vous excédez le maximum permis:
1) C34516 2)
0376508
+ 432116 + 1504408
---- ------
066616
0103108
Dans l'exemple 1, le 1 de retenue est perdu et ignoré et le programme
continue avec 0666 sans mention d'erreur.
Cependant il existe un témoin de retenue (Carry) qui constate ce fait.
Le programme se doit de vérifier la présence de cette retenue afin d'émettre un
message d'erreur.
Dans l'exemple 2, le 1 de retenue est perdu et ignoré et le programme
continue avec 010310 sans mention d'erreur.
Cependant il existe un témoin de retenue (Carry) qui constate ce fait.
Le programme se doit de vérifier la présence de cette retenue afin d'émettre un
message d'erreur.
Notez que le premier chiffre ne peut être qu'un 0 ou un 1 car il ne contient que
16 bits (1 bit suivi de 5 groupes de 3 bits).
3.Y.2 Additions/soustractions de nombres de différentes bases
Vous désirez effectuer un calcul avec des nombres provenant de différentes bases:
7F35 (base 16)
+ 1038 (base 16)
- 001716(base 8)
Solution:
a) convertir
7F3516 en base 8 en passant d'abord par la base 2:
7F3516 --> 0111 1111 0011 01012
--> 0 111 111 100 110 1012 --> 0774658
b) convertir 103816 en base 8 en passant d'abord
par la base 2:
103816 --> 0001 0000 0011 10002
--> 0 001 000 000 111 0002 --> 0100708
c) additionner: 0774658 + 0100708
--> 01075558
d) soustraire: 01075558 - 0017168
--> 1056378
e) convertir en décimal:
1 x 8^5 + 0 x 8^4 + 5 x 8^3 + 6 x 8^2 + 3 x 8^1 + 7 x 8^0 =
32768+0+2560+384+24+7 = 3574310