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

C++ Discussion :

Simuler les registres d'un processeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut Simuler les registres d'un processeur
    Bonjour à tou(te)s,

    Je cherche à simuler les registres d'un processeur.
    J'ai donc imaginé des registres un peu comme dans un processeur intel :
    AH
    AL
    AX
    AEX

    Je souhaite obtenir ce genre de modèle en mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AEX
    AY                AX
                      AH       AL
    00000000 00000000 00000000 00000000
    Où AY est un "registre" non utilisable, et j'ai naturellement pensé aux structures. Mais je n'arrive pas à bien poser tout ca. En fait, j'ai essayé quelques trucs, mais j'obtiens des trucs vraiment bizarres ou des erreurs de compilo. Quelqu'un a déjà fait ca ? Sinon je poserai le problème bien à plat, parce que là je n'arrive pas trop à me concentrer

    PS : un essai infructueux, ne grondez pas, je n'arrive plus à réfléchir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    union x_register
    {
        unsigned short int x;
        struct sub
        {
            unsigned char l;
            unsigned char h;
        };
    };
    EDIT : Je vais voir si l'utilisation d'un objet ne serait pas plus simple, et tant pis pour la "perte" de mémoire.

  2. #2
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Je ne sais pas si tu connais les "union", c'est exactement ce dont tu as besoin. Une petite recherche devrait te donner des exemples.

  3. #3
    screetch
    Invité(e)
    Par défaut
    il me semblait que le coup des unions, c'etait pas loin
    un probleme, c'est que les unions n'ont qu'une garantie, c'est de n'offrir aucune garantie
    du coup il me semble qu'une classe C++ serait mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Register
    {
    private:
      unsigned int m_value;
    public:
      unsigned int ex() { return m_value; }
      unsigned short y() { return (m_value >> 16) & 0xffff; }
      unsigned short x() { return m_value & 0xffff; }
      unsigned char h() { return (m_value >> 8) & 0xff; }
      unsigned char l() { return m_value & 0xff; }
    };
    a priori tout sera optimisé au mieux

  4. #4
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    j'aurais fait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    struct reg
    {
    	union
    	{
    		__int32 eax;
    		struct
    		{
    			__int16 ay;
    			union
    			{
    				__int16 ax;
    				struct
    				{
    					__int8 ah;
    					__int8 al;
    				};
    			};
    		};
    	};
    };
    Il me semble que le seul problème c'est si le compilateur pad pas les champs des structures octet par octet.

    Après dans les deux cas tout ça ne va pas si tu fais tourner ton programme sur une architecture non little-endian.

  5. #5
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    J'avais pensé aux unions, mais j'avais du mal faire un truc car je suis revenu aux structures... Je vous ai dit que j'étais fatigué

    Sinon, sur les archi types Intel, en effet, le contenu des struct est à mettre à l'envers.
    Je vais regarder ta solution Twindruff, merci

  6. #6
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    Bon, la solution semble intéressante, mais pour manipuler ca, ca va pas forcément être simple, non ?

    un petit "reg a;" ne me permet pas facilement de manipuler le ax ou les ah et al... Va falloir que je me plonge sérieusement là-dedans moi.

  7. #7
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    De rien .
    En fait contrairement à ce qu'on pourrait croire on peut accéder à tous les champs directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    reg r;
    r.eax = 1;
    r.ay = 2;
    r.ax = 3;
    r.al = 4;
    r.ah = 5;

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

Discussions similaires

  1. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  2. Réponses: 1
    Dernier message: 29/11/2005, 10h10
  3. Lire/écrire les registres
    Par Age Piranha dans le forum Windows
    Réponses: 11
    Dernier message: 11/03/2005, 18h31
  4. Exception systeme W32 et registre FS du processeur
    Par heinquoi dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 10/10/2004, 13h58
  5. TASM ne connaît pas les registres FS et GS
    Par forthx dans le forum Assembleur
    Réponses: 4
    Dernier message: 07/06/2003, 00h56

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