IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Modifier des bits spécifiques d'un registre


Sujet :

Assembleur

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut Modifier des bits spécifiques d'un registre
    Bonjour!

    Mon exploration dans le langage d'assemblage continue... et me voilà face à un nouveau problème.

    Je me demandais s'il était possible de manipuler des bits spécifiques dans un registre?

    Je sais que mon registre eax se décompose en deux autres registres (AL et AH) qui permettent de modifier les 16 bits de poids forts et de poids faibles du registres eax.

    Seulement, lorsque je souhaites modifier les 4 premiers bits de mon registre eax et non les 16 premiers, comment puis-je procéder? Est-ce possible?

    Merci!

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 214
    Par défaut
    eax est divisible en ax pour les 16 bits de poids faible, pas d'acès aux 16 bits de poids fort par un "sous-registre" spécifique.

    Pour modifier des bits spécifiques on utilise and pour les masquer et or pour les forcer à 1.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut
    Merci pour votre réponse,

    Dans ce cas pouvez-vous me dire à quoi corresponde les registres:

    - AH et AL (deux sous-registres d'eax)
    - BH et BL ( "" ebx)
    - CH et CL ("" ecx)
    - DH et DL ("" edx)

    J'étais persuadé à 200% que chacun de ces registres représentaient les 16 bits de poids forts (pour les registres se terminant par H) et les 16 bits de poids faibles (pour les registres se terminant par L).

    Quoiqu'il en soit vous répondez à ma question: je ne peux modifier des bits spécifiques d'un registre que par des opérations logiques.

    Merci!

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Les registres ah , al et les autres sont des registres 8 bits.

    Ce qu'ils correspondent :

    EAX : registre accumulateur (accumulator register). Utilisé pour les opérations arithmétiques et le stockage de la valeur de retour des appels systèmes.
    EDX : registre de données (data register). Utilisé pour les opérations arithmétiques et les opérations d'entrée/sortie.
    ECX : registre compteur (counter register)
    EBX : registre de base (base register). Utilisé comme pointeur de donnée (située dans DS en mode segmenté).
    Néanmoins c'est une vielle version , de nos jours sur du x86-64 bits ce sont des registres généraux.

    Je note aussi que c'est particulier au x86 d'avoir des "sous-registre" , de même que de nommer les registres de façon différente suivant leur nombre de bits ah/al , eax , rax (mais c'est peut être pour la syntaxe assembleur ? il est vrai qu'on écrit rarement .b / .w . l pour designer ce qu'on manipule ) , alors que sur d'autre processeur ils ont le même nom peut importe leur nombre de bits (r0 , d0 ou autre ).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut
    Merci pour vos réponses, le sujet passe en résolu.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 214
    Par défaut
    Pour préciser :
    al=bits 7 à 0 du registre eax
    ah=bits 15 à 8 du registres eax
    ax=bit 15 à 0 du registre eax
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un test binaire sur des bits spécifiques ?
    Par Madmac dans le forum Mathématiques
    Réponses: 2
    Dernier message: 24/01/2016, 21h12
  2. "Order by" sur des valeurs spécifiques
    Par damienTrax dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/11/2004, 09h20
  3. [CR9]Modifier des états créés en V9 par la V8.5
    Par Milou79 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 03/09/2004, 11h37
  4. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 19h09
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo