Il est utile avant de commencer à apprendre l'assembleur de connaitre les différents système de numération et la convertion entre chaque système .

    1) Les systèmes de numérations

    Le système DECIMAL (base de 10) :

    Le système décimal vous le connaissez tous, il est composé de 10 chiffres (0 à 9) avec lesquels on fait les nombres. Si le nombre dépasse 9, on augment le nombre devant le 9 (s'il n'y a rien s'est 0) d'une unité et le 9 passe à 0. ( 0,.....,8,9,10,11,......,19,20,21 ect...)

    Pourquoi je vous parle de cela , c'est pour faire comprendre par analogie le système binaire et hexadécimale.

    Le système BINAIRE (base de 2) :

    En informatique la machine ne connait que 2 états : 0 (le courant ne passe pas ) 1 (le courant passe) Chacun de ces états peut être associé à la valeur d'un BIT. On compte de la même manière qu'en décimal :

    BINAIRE + DECIMAL
    0 | 0
    1 | 1
    10 | 2
    11 | 3
    100 | 4
    101 | 5
    110 | 6
    111 | 7
    1000 | 8
    ect ...

    Voici quelque défintion :

    On appelle un OCTET (ou BYTE ), un nombre composé de 8 BIT (c'est à dire 8 "0" ou "1" ) par exemple : 01001100

    On appelle un MOT (ou WORD ),un nombre composé de 16 BIT = 2 OCTET .

    On appele un DOUBLE MOT (ou DWORD ),un nombre composé de 32 BIT = 4 OCTET = 2 MOT .

    Plus rarement utilisé (utilisé pour le coprocesseur arithmétique ,je crois): FWORD = 6 OCTET QWORD = 8 OCTET TWORD = 10 OCTET

    Le système HEXADECIMAL (base de 16) :

    Le système hexadécimal a était crée pour simplifié la notation binaire . En effet ,il est lassant d'écrire de longue chaine de '0' et de '1' ,de plus des erreurs peuvent en découler,aussi représente-t-on par un seul chiffre chaque groupe de 4 chiffres binaires.Ce qui fait 16 combinaison possible . Le système hexadécimal est composé comme vous l'avait deviné de 16 chiffres. On a reprit les 10 chiffres (0 à 9) du système décimal et comme il n'existé pas de symbole pour les chiffres 10 à 15 ,on a décidé de prendre les 6 premières lettres de l'alphabet( A,B,C,D,E,F).L'hexadécimal n'est en fait que du binaire condencé. on obtient en comptant : 0,1,2,........,8,9,A,B,C,D,E,F,10,11,12,........,19,1A,1B,1C,1D,1E,1F,20,21,....... ........98,99,A0,A1,.....,A9,AA,.....,AF,B0, ect ... J'espère que vous avez compris.

    VOICI UN TABLEAU RECAPITULATIF :

    DECIMAL+ BINAIRE + HEXADECIMAL
    0 | 0000 | 0
    1 | 0001 | 1
    2 | 0010 | 2
    3 | 0011 | 3
    4 | 0100 | 4
    5 | 0101 | 5
    6 | 0110 | 6
    7 | 0111 | 7
    8 | 1000 | 8
    9 | 1001 | 9
    10 | 1010 | A
    11 | 1011 | B
    12 | 1100 | C
    13 | 1101 | D
    14 | 1110 | E
    15 | 1111 | F
    --------------------------------------------
    16 |10000 | 10
    17 |10001 | 11
    18 |10010 | 12
    etc ...

    REMARQUE:

    Pour connaitre la base auquelle le nombre appartient ,il faut mettre dérrière celui-ci, une lettre qui indique sa base . sur PC :

    pour un nombre binaire ,on met un B : 10101111B

    pour un nombre décimal ,on met un D : 42D (ou on ne met rien :42)

    pour un nombre héxa ,on met un H : 12H

    IL NE FAUT PAS L'OUBLIER quand vous programmerez . Avec certains assembleurs ,il faut mettre un '0' devant un nombre héxadécimal quand il commence par une lettre (ex: 0d6H)


    on peut trouver aussi d'autre notation que l'on met devant : (qui marche peut-être sur PC avec certain assembleur ?)

    pour un nombre binaire ,on met un % : %10101111

    pour un nombre décimal ,on met un ? : ?42 (je ne sais plus ,| peut-être) par défaut rien

    pour un nombre héxa ,on met un $ : $12 (C'est le cas avec l' atari ST et la programmation des microcontrolleurs)

    2) La convertion entre chaque systemes

    La convertion binaire => héxadécimal :

    Prenons un nombre binaine au hazard ,par exemple : 10111011010101B Pour le convertir en HEXA(=héxadécimal),il suffit de séparer (en commençant par la droite) le nombre binaire en groupe de 4 chiffres binaires ,puis de regarder dans le tableau (que vous devrez connaitre par coeur) pour y retrouver la valeur conrespondante.

    NOMBRE BINAIRE : (00)10 1110 1101 0101 B
    NOMBRE HEXA : 2 E D 5 H

    on obtient : 10111011010101B=2ED5H

    La convertion héxa => binaire :

    On procéde de la manière inverse .(je sur que vous avez compris)

    La convertion binaire => décimal :

    Prenons un nombre décimal au hazard : 483

    Il peut s'écrire : (4*10^2)+(8*10^1)+(3*10^0) 10 étant sa base (décimal = base de 10)

          400 + 80 + 3 = 483

    ( ^ veut dire puissance : 10^0 =1)

    Pour les nombre binaire on fait la même chose. on prend un nombre binaire(base de 2) au hazard : 1001101B

    Il peut aussi s'écrire : (1*2^6)+(0*2^5)+(0*2^4)+(1*2^3)+(1*2^2)+(0*2^1)+(1*2^0)

            = 1*64 + 0*32 + 0*16 + 1*8 + 1*4 + 0*2 + 1*1

            = 64 + 0 + 0 + 8 + 4 + 0 + 1

            = 77 en décimal (77D)

    C'est comme ça qu'on fait pour convertir un nombre binaire en décimal .

    La convertion décimal => binaire :

    Pour convertir un nombre décimal en binaire ,il suffit de diviser le nombre décimal par la base binaire qui est de 2 ,jusqu'a ce que le résultat soit inférieur ou égale au plus grand chiffre de cette même base (binaire) ,c'est à dire =<1 et il faut noter à chaque division par 2 le reste (qui indiquera le nombre binaire avec le dernier résultat qui est toujours 1). ça parait compliquer ,mais avec un exemple vous allez comprendre . on va convertir 211(décimal) en binaire:

    211 : 2 = 105 reste 1

    105 : 2 = 52 reste 1

    52 : 2 = 26 reste 0

    26 : 2 = 13 reste 0

    13 : 2 = 6 reste 1

    6 : 2 = 3 reste 0

    3 : 2 = 1 reste 1

    dernier résultat(=<1) = 1

    On obtient ainsi le nombre binaire .Il faut le lire en commençant par le bas On a 211 = 1101 0011B

    REMARQUE : On peut aussi appliquer cette méthode pour convertir un nombre héxadécimal en binaire.

    La convertion héxadécimal => décimal :

    Pour convertir un nombre héxadécimal en décimal on aplique la même méthode que pour la convertion binaire => décimal . Prenons un nombre héxadécimal(base de 16) au hazard ,par exemple : 3D4H Vous savez maintenant qu'il peut aussi s'écrire :

    (3*16^2)+(D*16^1)+(4*16^0)

      = (3*16^2)+(13*16^1)+(4*16^0)

      = (3*256) +(13*16) +(4*1)

      = 768 + 208 + 4

      = 980 en décimal (simple non?)

    REMARQUE: On peut aussi apliquer la méthode précédente (décimal =>binaire) mais avec les valeurs appropriés.(qui marche pour toute les convertions ,mais pas toujours pratique)

    EXEMPLE : On prend un nombre héxa au hazard : 3CEH et on divise ce nombre par la base (décimal) à convertir ,c'est à dire 10D=AH jusqu'a ce que le résultat soit inférieur ou égal au plus grand chiffre de cette même base(décimal) c'est à dire =<9 :

    3CEH : AH = 61H reste 4

    61H : AH = 9H reste 7

    dérnier résultat (=< 9) = 9

    on lit le chiffre du bas vers le haut : 3CEH = 974D

    La convertion décimal => héxadécimal :

    Pour convertir un nombre décimal en héxadécimal on peut d'abord le convertir du décimal => binaire puis du binaire => héxadécimal .

    Ou on peut apliqué la méthode décimal => binaire exemple: soit 554 un nombre décimal pris au hazard . 554 : 16 = 34 reste 10D = AH 34 : 16 = 2 reste 2 derniér résultat (=< 16D=FH ) =2 il faut lire le nombre de bas en haut : 554D=22AH

    3) Les nombres non signés et signés en informatique

    En informatique les nombres ne peuvent pas être infinie , il ont une certaine taille : 8 bit(=OCTET) = 2^8 = 256 combinaison
    C'est un nombre qui va de 0 à 255(= FFH=11111111B) (non signé)

    16 bit(=WORD) =2^16 = 65536 combinaison
    C'est un nombre qui va de 0 à 65535(= FFFFH=1111111111111111B) (non signé)

    32 bit(=DWORD)= 2^32 = 4294967296 combinaison
    C'est un nombre qui va de 0 à 4294967295(= FFFFFFFFH= 11111111111111111111111111111111B) (non signé)

    Quand le microprocesseur fait des calculs avec des instrutions qui prennnent en compte le signe,il connait le signe du nombre grace au bit de plus haut rang (c'est à dire le bit le plus à gauche) : s'il est à 0 c'est un nombre positif. s'il est à 1 c'est un nombre négatif

    Avec un octet ,c'est le 8éme bit qui sert de signe : -127(80H)=<octet=<127(7FH)
    Avec un word , c'est le 16éme bit : -32767(8000H)=<word=<32767(7FFFH)
    Avec un dword , c'est le 32éme bit : -2147483647(80000000H)=<DWORD=<2147483647(7FFFFFFFH)

    4)Le BCD (Binaire Codé Décimal)

    Le BCD n'est pas un nouveau système de numération,c'est seulement une notation pour écrire les nombres décimaux en binaire. (ndlr: on trouve souvent ce système dans les numéros de versions des cartes, gestionnaires ...) Pour écrive les nombres décimaux en binaire ,il faut 4 bit :

    decimal + BCD
    0 | 0000
    1 | 0001
    2 | 0010
    3 | 0011
    4 | 0100
    5 | 0101
    6 | 0110
    7 | 0111
    8 | 1000
    9 | 1001

    Et on s'arrete la, les autres combinaisons sont interdites

    Il y a 2 format BCD.

    L'un dit compacté ,on écrit alors 2 chiffres BCD dans un octet : 56 = 0101 0110 (en BCD)

    L'autre dit non compacté , on écrit alors un seul chiffre BCD dans un octet : 8 = 0000 1000 (en BCD)

    Informations sur l'auteur:

    E-mail: pccoder@club-internet.fr