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 :

[Débutante] Conception


Sujet :

Assembleur

  1. #1
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut [Débutante] Conception
    bonjour

    voici un morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    mov ax,100
       mov bx,10
       mov cx,0
    boucle:
       sub ax,bx
       add cx,1
       cmp ax,bx
       jae boucle
    on me dit ceci
    On propose une amélioration qui permet d'effectuer deux instructions UAL en même temps avec un CPI de 1. Le codage de l'instruction sera le suivant : instruction 1 | instruction 2. La seule contrainte est que les opérandes des instructions doivent être différentes.
    on me demande de réecrire le code en fonction de cette particularité
    mais je ne comprends pas trop ca
    instruction 1 | instruction 2. La seule contrainte est que les opérandes des instructions doivent être différentes.

    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Hum, moi je comprends rien à l'énnoncé. C'est quoi deux instructions UAL, c'est quoi un CPI de 1 ?

  3. #3
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    CPI = Nombre de cycles d'horloge par instruction.
    L'UAL : L'unité arithmétique et logique (UAL)

    voila

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Aaaaah, c'est facile alors : )
    On peut regrouper les instructions par deux, à partir du moment où elles n'ont pas les mêmes opérandes. On ne pourra pas regrouper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    add eax, eax | add edx, eax
    parce que eax sera dans les deux instructions. Enfin, si j'ai bien compris, huhu ^^

    [edit]ooups, j'ai écrit plein de conneries[/edit]

    Je ne sais pas trop quelles opérations sont considérées comme étant executée par l'UAL. sub et add doivent y être, donc on doit pouvoir écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     mov ax,100 
      mov bx,10 
      mov cx,0 
    boucle: 
      sub ax,bx | add cx,1 
      cmp ax,bx 
      jae boucle
    car ax != cx et bx != cx

  5. #5
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    donc en fait avant l'améloration la boucle faisait 3 cycles

    mais maintenant avec l'améloration ca fait é cycles ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    3 cycles, ca dépend comme tu comptes, mais pour 486 ca faisait 4 cycles. Sur PPlain et PMMX ca n'en faisait que 2, etc. Mais ca doit faire un cycle de moins avec amélioration, effectivement ^^

  7. #7
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    d'accord j'ai bien compris
    merci pour toutes tes explications

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    bonjour

    Citation Envoyé par bolo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      mov ax,100
       mov bx,10
       mov cx,0
    boucle:
       sub ax,bx
       add cx,1
       cmp ax,bx
       jae boucle
    Citation Envoyé par Blustuff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      mov ax,100
      mov bx,10
      mov cx,0
    boucle:
      sub ax,bx | add cx,1
      cmp ax,bx
      jae boucle
    En fait, il est clair dans les 2 cas que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      ...
      mov cx,0
      ...
      add cx,1
       ...
    ne servent à rien

    Dans le code de Blustuff,
    , les 2 opérations vont bien être exécutées en même temps, mais je ne pense pas que ce soit la solution, vu qu'une des 2 ne sert à rien

    Comme les données sont fixées, on sait que l'on va faire 10 boucles (eax = 100 descend vers 0, pas = 10)
    Je propose donc plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      mov ax, 100
      mov bx, 10
      mov cx, 10
    boucle:
      sub ax, bx | dec cx
      jnz boucle
    Je n'ai pas sous la main la table des instructions... et je ne suis donc pas sûr qu'on va avoir un CPI = 1, d'autant que ça va dépendre du processeur.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  9. #9
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Wouarf, vous ne voudriez pas expliquer un brin à un débutant désireux d'apprendre?

  10. #10
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    pourquoi tu dis cz
    les 2 opérations vont bien être exécutées en même temps, mais je ne pense pas que ce soit la solution, vu qu'une des 2 ne sert à rien

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Crisanar, je ne comprends pas trop l'interêt de cet exercice, s'il est purement fictif ou s'il a une ouverte. Je pense par contre, qu'il est certainement inutile que vous vous interessiez à cela, si vous n'avez pas la totalité de l'énnoncé, que vous pouvez peut être demander à Bolo en privé : )


    Thewho, vous pensez que l'instruction add cx, 1 ne sert à rien, mais en réalité, tout le code sert à une et pratiquement une seule chose à mettre le quotien de la division entière dans cx. En outre, on a le reste dans bx. La réecriture doit logiquement garder ses aspects.


    Blustuff.

  12. #12
    Membre émérite
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Points : 2 695
    Points
    2 695
    Par défaut
    Thewho, vous pensez que l'instruction add cx, 1 ne sert à rien, mais en réalité, tout le code sert à une et pratiquement une seule chose à mettre le quotien de la division entière dans cx. En outre, on a le reste dans bx. La réecriture doit logiquement garder ses aspects.
    dc il sert qqch ces lignes

  13. #13
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Blustuff
    Crisanar, je ne comprends pas trop l'interêt de cet exercice, s'il est purement fictif ou s'il a une ouverte. Je pense par contre, qu'il est certainement inutile que vous vous interessiez à cela, si vous n'avez pas la totalité de l'énnoncé, que vous pouvez peut être demander à Bolo en privé : )[...]
    Excuse-moi mais je n'ai pas tout compris. Ce message veut-il dire que je poste pour flooder? Je ne demandais qu'une breve explication de ce qui se passait ici. En fait j'avais mal compris, je pensais que l'on parlait de programmation "normale" et non du situation imaginaire dans le cadre d'un exercice. M'etant focalisé sur ce pipe ("|") que je ne connaissais pas, je pensais qu'il y avait moyen de faire exécuter 2 instructions simultanément et celà m'intéressait. Mais c'est bon je pense maintenant avoir compris la demande. Si le but est bien d'optimiser la fonction tout en sachant que ce qui importe est la rapidité d'execution et que les opérations sur cx doivent etre conservées voici ce que je proposerai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mov ax,100|mov bx,10	; selon l'enoncé -> 1 cycle
    xor cx,cx   		; xor est plus rapide qu'un mov reg16,0
    bcl:
    add cx,1|sub ax,bx	; cmp = sub, -> 1 cycle
    jae bcl
    pour le add cx,1|sub ax,bx (où le add cx,1 pourrait etre remplacé par un inc cx mais ici on ne gagnera rien vu que ca sera qd mm 1 cycle, difficile de faire moins ) si c'est bien le sub qui positionne les flags alors on peut sans problème remplacer le CMP par le SUB.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Executer deux instructions en même temps, ca s'appelle le pairing, et ca marche sur les PPlain et PMMX. Deux instructions sont pairables quand il y a un tas de conditions, il y a le U Pipe et le V Pipe, qui ne peuvent prendre que certaines instructions, il faut pas que la seconde instruction écrive sur une opérande lue ou écrite par la première, et un tas d'autres conditions comme ça. Mais je ne crois pas qu'il y ait rapport avec l'énnoncé là :/

    Le mov, je voulais les grouper au début, mais ca me semble ni une opération logique, ni arithmétique. Même évidement étant simplissimes elle aurait encore plus de raisons de pouvoir être couplée.


    Blustuff.

  15. #15
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Ce qui veut dire? Je suis complètement à coté de la plaque? Je dois retourner jouer avec ma petite pelle et mon seau ou ce que j'ai ecrit est correct?
    EDIT : Effectivement apres relecture de l'ennoncé j'avais encore loupé que ca devait etre 2 instructions UAL donc pour les mov ca ne va pas. Enfin pour le xor et le add|sub logiquement si. Non?

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

Discussions similaires

  1. [Débutant][Conception] Factorielle en Java par recursivité
    Par Sylvester dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 02/11/2008, 20h42
  2. [Débutant] Conception requêtes SQL
    Par LhIaScZkTer dans le forum Langage SQL
    Réponses: 15
    Dernier message: 10/01/2006, 21h46
  3. [Débutant] Concepts : types + tas de questions
    Par Epouvantail dans le forum C++
    Réponses: 7
    Dernier message: 01/12/2005, 10h27
  4. [débutante][Concept] Destruction d'objet, mode d'emploi?
    Par skea dans le forum Général Java
    Réponses: 4
    Dernier message: 12/06/2004, 21h48
  5. [Débutant][Conception] LIFO et Iterator
    Par Wisefool dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 05/05/2004, 13h50

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