Assembleur

Résolu
gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   -  
gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
mov ax , 0034h; ax = 52 (stocké sur 16 bits)
mov cl , al ; cl= les 8 bits de poids faibles de ax

le code ci-dessus permet de reduire la taille de ax. Quelqu'un peut-il m'expliquer ce qui se passe en réalité?
Qu'est qu'un bit de poids faible?un bit significatif?

Pouvez-vous me donner un exemple de cette règle:

La règle pour les nombres non signés est que tous les bits retirés soient
à 0 anfin que la convertion soit correcte. La règle pour les nombres signés est
que les bits retirés doivent soit tous être des 1 soit tous des 0. De plus, Le
premier bit à ne pas être retiré doit valoir la même chose que ceux qui l'ont
été. Ce bit sera le bit de signe pour la valeur plus petite. Il est important
qu'il ait la même valeur que le bit de signe original!

merci

1 réponse

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Pour ton exemple de code, voici comment est organisé eax:
                EAX
---------------------------------------
                            AX
                     ------------------
                       AH      AL
                     -------   --------
........  ........   ........  ........

EAX est sur 32 bits, soit 4 octets.
Ses deux octets de poids faible sont contenus dans le registre AX.
L'octet de poids fort de AX est dans AH et son octet de poids faible est dans AL.

Donc si tu mets 34h dans AX ça donne (si eax était égal à 0 avant celà):
EAX
-----------------------------------------------------------------------
                                                    AX
                                     ----------------------------------
                                            AH              AL
                                     ----------------  ----------------
00000000          00000000             00000000              00110100

Maintenant admettons de ecx était égal à 256, soit:
ECX
-----------------------------------------------------------------------
                                                    CX
                                     ----------------------------------
                                            CH              CL
                                     ----------------  ----------------
00000000          00000000             00000001               00000000


Si après tu fais:
mov cl , al

Alors ecx ressemblera à ça:
ECX
-----------------------------------------------------------------------
                                                    CX
                                     ----------------------------------
                                            CH              CL
                                     ----------------  ----------------
00000000           00000000               00000001             00110100

Tu vois cette opération n'a modifié que la partie de basse de ecx (CL). La partie CH n'a pas bougé.

Pouvez-vous me donner un exemple de cette règle:

La règle pour les nombres non signés est que tous les bits retirés soient
à 0 anfin que la convertion soit correcte. La règle pour les nombres signés est
que les bits retirés doivent soit tous être des 1 soit tous des 0. De plus, Le
premier bit à ne pas être retiré doit valoir la même chose que ceux qui l'ont
été. Ce bit sera le bit de signe pour la valeur plus petite. Il est important
qu'il ait la même valeur que le bit de signe original!


Cette règle se rapporte à quoi? Ca me rappelle un peu la règle du décalage arithmétique vers la droite (sar) pour les signés et le décalage normal vers la droite (shr).
0
gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   1
 
salut,
si ax au départ contenait 256,et que nous y ajoutions 34h. aurions nous ceci:

EAX
-----------------------------------------------------------------------
AX
----------------------------------
AH AL
---------------- ----------------
00000000 00000000 00000001 00110100
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
Oui.
0
gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   1 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
ECX
-----------------------------------------------------------------------
CX
----------------------------------
CH CL
---------------- ----------------
00000000 00000000 00000001 00110100

a ton donc reduit la taille de ECX ou celle de EAX? si comment cela s'explique t il ?
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention  
 
On a pas reduit leur taille, on a juste travaillé sur des parties de ces registres sans toucher au reste.
0
gilles81 Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   1 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
Dans le cours l'auteur parle de :"réduire la taille des données".voici en fait ce qui est écrit:

Pour réduire la taille d'une donnée, il sut d'en retirer les bits les plus
signicatifs. Voici un exemple trivial :
mov ax, 0034h ; ax = 52 (stocké sur 16 bits)
mov cl, al ; cl = les 8 bits de poids faible de ax
0