Partage
  • Partager sur Facebook
  • Partager sur Twitter

Relation entre shift register et instruction shift

Sujet résolu
Anonyme
    7 mai 2019 à 9:59:45

    Salut à tous !

    J'aimerais savoir si, en assembleur, un registre à décalage (shift register) est utilisé à l'appel d'instructions comme shift ou rotate.

    Cela peut sembler évident mais je n'ai rien trouvé permettant d'établir une relation claire entre les deux...

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      7 mai 2019 à 13:41:29

      Hello,

      Je n'ai jamais entendu parler de registre à décalage dans un processeur. En faisant une recherche wiki j'ai l'impression que le terme "registre à décalage" dénote un certain agencement de bascules dans un circuit logique, ça n'a a priori rien à voir avec un registre processeur ou de l'assembleur.

      Les processeurs ont des registres qui font 32 bits ou 64 bits - un registre tu peux voir ça comme une "case mémoire" à accès très rapide mais à contenu très limité. Le processeur a un jeu d'instructions (ISA) qui va permettre d'intéragir avec les registres, et effectivement certains processeurs vont avoir une instruction rotate qui va modifier les bits du registre spécifié. Je parle bien ici d'un registre processeur - pas du circuit logique "registre à décalage"

      Peut être que ta question c'est plus : comment un processeur fait, en interne, pour exécuter une instruction rotate ? Mais ça, ça dépend du processeur - les processeurs ont en général une unité arithmétique (ALU) qui va te permettre de faire des tas d'opérations (addition, soustraction, shift, voire même rotate). Maintenant, est-ce qu'il est possible d'utiliser un "registre à décalage" dans une ALU, je dirais que oui - est-ce que tous les processeurs font ça, pas forcément, et je dirais même que non parce que un "Registre à Décalage" a besoin d'une clock ce qui serait difficile à mettre en place. Je pense que la plupart des instructions de l'ALU sont encodées à base de NAND

      En tout cas ça n'a rien à voir avec l'assembleur - l'assembleur c'est le programme qui traduit le code assembleur en code binaire - c'est à dire qu'en entrée tu prends du texte qui te décrit tes instructions, et en sortie tu obtiens une suite d'octets qui est l'encodage des instructions que tu as données.

      https://en.wikipedia.org/wiki/Shift_register -> le circuit logique auquel tu penses, qui utilise notamment une clock

      https://en.wikipedia.org/wiki/Arithmetic_logic_unit -> unité logique et arithmétique - tu peux y voir un schéma logique qui te donne un exemple, on pourrait imaginer quelque chose ressemblant à un Shift Register, mais à mon avis tout est fait à base de NAND sans utiliser de clock

      https://en.wikipedia.org/wiki/Assembly_language#Assembler -> définition de ce que c'est qu'un "assembleur"

      -
      Edité par potterman28wxcv 7 mai 2019 à 13:44:23

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 mai 2019 à 12:48:35

        Merci pour ta réponse !

        Je sais ce qu'est l'assembleur, je m'interrogeai simplement sur la logique interne derrière l'instruction shift (ma question fut formulée maladroitement ) ^^

        Tu supposes que la plupart des instructions sont encodées à base de NAND. Un registre à décalage peut n'être constitué que de ces portes logiques (avec des bascules D à NAND, par exemple). Pourquoi l'horloge serait-elle complexe à mettre en oeuvre ?

        • Partager sur Facebook
        • Partager sur Twitter
          8 mai 2019 à 13:11:47

          Medrogan a écrit:

          Merci pour ta réponse !

          Je sais ce qu'est l'assembleur, je m'interrogeai simplement sur la logique interne derrière l'instruction shift (ma question fut formulée maladroitement ) ^^

          Tu supposes que la plupart des instructions sont encodées à base de NAND. Un registre à décalage peut n'être constitué que de ces portes logiques (avec des bascules D à NAND, par exemple). Pourquoi l'horloge serait-elle complexe à mettre en oeuvre ?

          Parce que le processeur a sa propre horloge, qui fonctionne à une certaine cadence. Une instruction arithmétique telle que le rotate fonctionne en général en 1 cycle d'horloge. Pour faire en sorte que le rotate se fasse en 1 cycle processeur, mais tout en utilisant un "shift register", il faudrait une deuxième horloge qui soit plus rapide que la cadence processeur (par exemple en 1 cycle processeur tu aurais 4 cycles de cet horloge), ça me parait pas facile à faire.

          D'autant plus que le temps d'exécution du rotate dépendrait du nombre de bits que tu veux décaler, et ça c'est très mauvais. Ou alors il faudrait adapter la fréquence de cet horloge du shift register de façon à ce que ça équivaut à 1 cycle processeur.. Mais si tu veux par exemple faire un rotate de 63 bits, il faudrait alors une horloge 63 fois plus rapide (si je me souviens bien le shift register mets 63 cycles pour rotate 63 bits), soit quelque chose qui se rapproche du 120 GHz...

          Bref, si tu arrives à exprimer le rotate qu'avec des portes logiques et sans aucune horloge, c'est quand même mieux.

          D'ailleurs je viens de trouver un article qui explique comment c'est fait, ça s'appelle "barrel shifter"

          https://fr.wikipedia.org/wiki/Barrel_shifter



          -
          Edité par potterman28wxcv 8 mai 2019 à 13:15:15

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            9 mai 2019 à 12:50:18

            C'est tout ce que je voulais savoir, encore merci !
            • Partager sur Facebook
            • Partager sur Twitter

            Relation entre shift register et instruction shift

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown