Guide explicatif sur le chapitre 3 des notes de cours de
GABRINI, Ph. -- Organisation des ordinateurs et assembleur.

Extraits du chapitre 2. Structure et fonctionnement d’un ordinateur

2.2.1 La mémoire

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.

Chapitre 3. Codage de l'information

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
chiffres hexadécimaux.

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


3.1.4.3 Effectuer les additions binaires ci-dessous:

  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
chiffres
octaux.

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 1002

149210                   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)

          ------------------------
      ?   (base 10)

Solution:
            a) convertir 7F3516 en base 8 en passant d'abord par la base 2:
                                7F3516 --> 0111 1111 0011 0101--> 0 111 111 100 110 101--> 0774658
                  
b) convertir 103816 en base 8 en passant d'abord par la base 2:
                                103816 --> 0001 0000 0011 1000-->  0 001 000 000 111 000--> 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