mardi 8 juillet 2014

Les chiffres (II) [fr]

Voyons maintenant les limites des nombres .b, .w et .l : il y a déjà deux catégories, c'est à dire les nombres signés et non-signés (signed et unsigned en anglais). Avant de voir plus loin, il vous faut savoir que la position de chaque chiffre 0 ou 1 d'un nombre binaire est numérotée.

Prenons un exemple simple : le chiffre 7 tient sur un octet et s'écrit : %0000 0111

En partant de la gauche :
  • 0 est à la position 7,
  • 0 est à la position 6,
  • 0 est à la position 5,
  • 0 est à la position 4,
  • 0 est à la position 3,
  • 1 est à la position 2,
  • 1 est à la position 1,
  • 1 est à la position 0.

Le chiffre 7 peut aussi tenir sur un mot : %0000 0000 0000 0111

Dans ce cas, toujours en partant de la gauche :
  • 0 est à la position 15,
  • 0 est à la position 14,
  • 0 est à la position 13,
  • 0 est à la position 12,
  • 0 est à la position 11,
  • 0 est à la position 10,
  • 0 est à la position 9,
  • 0 est à la position 8,
  • 0 est à la position 7,
  • 0 est à la position 6,
  • 0 est à la position 5,
  • 0 est à la position 4,
  • 0 est à la position 3,
  • 1 est à la position 2,
  • 1 est à la position 1,
  • 1 est à la position 0.

Le chiffre 7 peut aussi tenir sur un long mot : %0000 0000 0000 0000 0000 0000 0000 0111

 Toujours en partant de la gauche :
  • 0 est à la position 31,
  • 0 est à la position 30,
  • 0 est à la position 29,
  • 0 est à la position 28,
  • 0 est à la position 27,
  • 0 est à la position 26,
  • 0 est à la position 25,
  • 0 est à la position 24,
  • 0 est à la position 23,
  • 0 est à la position 22,
  • 0 est à la position 21,
  • 0 est à la position 20,
  • 0 est à la position 19,
  • 0 est à la position 18,
  • 0 est à la position 17,
  • 0 est à la position 16,
  • 0 est à la position 15,
  • 0 est à la position 14,
  • 0 est à la position 13,
  • 0 est à la position 12,
  • 0 est à la position 11,
  • 0 est à la position 10,
  • 0 est à la position 9,
  • 0 est à la position 8,
  • 0 est à la position 7,
  • 0 est à la position 6,
  • 0 est à la position 5,
  • 0 est à la position 4,
  • 0 est à la position 3,
  • 1 est à la position 2,
  • 1 est à la position 1,
  • 1 est à la position 0.

 Revenons à nos moutons maintenant. Les octets, mots et long mots sont divisés en deux catégories :
1) Les signés
Ils contiennent un signe, qui peut donc être soit plus (+) ou soit moins (-). Pour signifier ceci au CPU, un bit spécial lui est consacré.
Pour un octet (byte ou .b) : bit n° 7
Pour un mot (word ou .w) : bit n° 15
Pour un long mot (long word ou .l) : bit n° 31

Pour avoir des nombres avec signe (-), il faut partir avec tous les bits à 1 et cette fois effectuer les décalages avec un 0 :
-1 = %1111 1111 = $FF
-2 = %1111 1110 = $FE
-3 = %1111 1101 = $FD
...

En reprenant notre chiffre 7 :
+7 = %0000 0111.b = $07
-7 = %1111 1001.b = $F9
+7 = %0000 0000 0000 0111.w = $0007
-7 = %1111 1111 1111 1001.w = $FFF9
+7 = %0000 0000 0000 0000 0000 0000 0000 0111.l = $00000007
-7 = %1111 1111 1111 1111 1111 1111 1111 1001.l = $FFFFFFF9
 
Donc, leurs limites sont :
Pour un .b (+) de :
0 à 127
%0000 0000 à %0111 1111
$00 à $7F
Pour un .w (+) de :
0 à 32 767
%0000 0000 0000 0000 à %0111 1111 1111 1111
$0000 à $7FFF

Pour un .l (+) de :
0 à 2 147 483 647
%0000 0000 0000 0000 0000 0000 0000 0000 à %0111 1111 1111 1111 1111 1111 1111 1111
$00000000 à $7FFFFFFF

Pour un .b (-) de :
-128 à -1
%1000 0000 à %1111 1111
$80 à $FF

Pour un .w (-) de :
-32 768 à -1
%1000 0000 0000 0000 à %1111 1111 1111 1111
$8000 à $FFFF

Pour un .l (-) de :
-2 147 483 648 à -1
%1000 0000 0000 0000 0000 0000 0000 0000 à %1111 1111 1111 1111 1111 1111 1111 1111
$80000000 à $FFFFFFFF
  
2) Les non-signés
Eux sont toujours plus (+) et n'ont donc aucun bit de distinction.

Leurs limites sont donc :
Pour un .b (+) de :
0 à 255
%0000 0000 à %1111 1111
$00 à $FF

Pour un .w (+) de :
0 à 65 535
%0000 0000 0000 0000 à %1111 1111 1111 1111
$0000 à $FFFF
Pour un .l (+) de :
0 à 4 294 967 295
%0000 0000 0000 0000 0000 0000 0000 0000 à %1111 1111 1111 1111 1111 1111 1111 1111
$00000000 à $FFFFFFFF

Bref, tout ceci est la base de l'assembleur : à connaitre sur le bout des doigts !
   

Aucun commentaire:

Publier un commentaire