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

x86 16-bits Assembleur Discussion :

Aide programme asm 8086


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 34
    Points
    34
    Par défaut Aide programme asm 8086
    Bonjour je dois évaluer le temps d'exécution de ce programme et je présume qu'il exécutera "Boucle : ADD AX , -1" 257 fois et "JNE Boucle" 257 fois. par contre sachant que la boucle sans saut vaut 4 cycles cela devrait me donner 258*4+256*16 pour le nombre de cycles.
    Quelqu'un pourrait me le confirmer s'il vous plait?


    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
             ASSUME CS:Code, DS:Data
     
    Data     SEGMENT
    Tempo    DW   0100H
    Data     ENDS
     
    Code     SEGMENT
    Debut:   MOV  AX, Data
             MOV  DS, AX
             MOV  AX, Tempo
    Boucle:  ADD  AX, -1
             JNE  Boucle
             MOV  AH, 4CH
             INT  21H
    Code     ENDS
             END  Debut

  2. #2
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Bonjour

    Le décompte de bouclage est une difficulté pour un non spécialiste.
    Le plus simple (et le plus sûr) est de prendre un papier et un crayon et de décomposer l'exécution "à la main", en prenant bien sûr une petite valeur pour le compteur de boucle.
    Par exemple si on prend 3 comme valeur initiale on aura:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ligne
    10          MOV AX, Tempo (Initialisation du compteur AX à 3)
    11 Boucle: (1er passage), AX passe à 2
    12          AX non à 0, on saute ligne 11
    11 Boucle: (2ème passage), AX passe à 1
    12          AX non à 0, on saute ligne 11
    11 Boucle: (3ème passage), AX passe à 0
    12          AX à 0, pas de saut, on continue ligne 13
    13          MOV ... etc.
    Conclusion pour Tempo = 3 on aura 3 passages ligne 11 et trois passages ligne 12 dont 2 fois avec saut réalisé et la troisième fois avec saut non réalisé.
    On constatera que, pour ces deux lignes, le nombre d'exécutions est égal à la valeur initiale du compteur et que pour la ligne 12, tous les sauts sont réalisés sauf le dernier qui est un saut non réalisé.

    Sachant que l'on a 4 cycles pour l'addition, 16 cycles pour un saut réalisé et 4 cycles pour un saut non réalisé, je te laisse le soin de faire le calcul pour une valeur initiale de 256.

    Je ne sais pas si tu effectue ce travail à titre de simple exercice ou dans le cadre d'une activité professionelle concrète, mais dans le second cas, sache que ce genre de calcul ne vaut que pour les microprocesseurs ancien comme le 8086 ou 8088.
    Les techniques utilisées dans les processeurs modernes, telles que exécution parallelisée, pipelinage, prédiction de branchement, et j'en passe, influent considérablement sur les performances.
    D'ailleurs dans ces processeurs d'architecture RISC, la plupart des instructions de base s'exécutent en un seul cycle d'horloge (interne), ce qui donne prépondérance à d'autres considérations telles que proportion de cycles d'accès mémoire, alignement des données, etc.
    Par conséquent le calcul du temps d'exécution par décompte de cycles risque de s'écarter considérablement de la réalité et doit plutot être considéré comme un exercice d'école.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par DomDA91 Voir le message
    Bonjour

    Le décompte de bouclage est une difficulté pour un non spécialiste.
    Le plus simple (et le plus sûr) est de prendre un papier et un crayon et de décomposer l'exécution "à la main", en prenant bien sûr une petite valeur pour le compteur de boucle.
    Par exemple si on prend 3 comme valeur initiale on aura:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ligne
    10          MOV AX, Tempo (Initialisation du compteur AX à 3)
    11 Boucle: (1er passage), AX passe à 2
    12          AX non à 0, on saute ligne 11
    11 Boucle: (2ème passage), AX passe à 1
    12          AX non à 0, on saute ligne 11
    11 Boucle: (3ème passage), AX passe à 0
    12          AX à 0, pas de saut, on continue ligne 13
    13          MOV ... etc.
    Conclusion pour Tempo = 3 on aura 3 passages ligne 11 et trois passages ligne 12 dont 2 fois avec saut réalisé et la troisième fois avec saut non réalisé.
    On constatera que, pour ces deux lignes, le nombre d'exécutions est égal à la valeur initiale du compteur et que pour la ligne 12, tous les sauts sont réalisés sauf le dernier qui est un saut non réalisé.

    Sachant que l'on a 4 cycles pour l'addition, 16 cycles pour un saut réalisé et 4 cycles pour un saut non réalisé, je te laisse le soin de faire le calcul pour une valeur initiale de 256.

    Je ne sais pas si tu effectue ce travail à titre de simple exercice ou dans le cadre d'une activité professionelle concrète, mais dans le second cas, sache que ce genre de calcul ne vaut que pour les microprocesseurs ancien comme le 8086 ou 8088.
    Les techniques utilisées dans les processeurs modernes, telles que exécution parallelisée, pipelinage, prédiction de branchement, et j'en passe, influent considérablement sur les performances.
    D'ailleurs dans ces processeurs d'architecture RISC, la plupart des instructions de base s'exécutent en un seul cycle d'horloge (interne), ce qui donne prépondérance à d'autres considérations telles que proportion de cycles d'accès mémoire, alignement des données, etc.
    Par conséquent le calcul du temps d'exécution par décompte de cycles risque de s'écarter considérablement de la réalité et doit plutot être considéré comme un exercice d'école.
    C'est pour un exercice sur le 8086, d'ailleurs l'énoncé stipule que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Debut:  MOV AX, Data  ; 10
            MOV DS, AX    ; 2
            MOV AX, Tempo ; 10
    Boucle: ADD AX, -1    ; 4 x 257
            JNE Boucle    ; 16 x 256 + 4
            MOV AH, 4CH   ; 4
            INT 21H       ; 52
    soit un Total = 10+2+10+4*256+16*255+4+4+52 = 5186
    Et je pense que la formule serait (considérant x=Tempo)

    10+2+10+4x+16(x-1)+4+4+52
    soit 20x+66

  4. #4
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par kuntagp
    soit un Total = 10+2+10+4*256+16*255+4+4+52 = 5186
    Et je pense que la formule serait (considérant x=Tempo)

    10+2+10+4x+16(x-1)+4+4+52
    soit 20x+66
    D'accord avec toi pour ce décompte.

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

Discussions similaires

  1. aide programmation d'un quizz
    Par mattboul dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/02/2007, 10h07
  2. Aide programme C
    Par jordan49 dans le forum C
    Réponses: 8
    Dernier message: 02/10/2006, 07h35
  3. aide programmation en C
    Par luce2005 dans le forum C
    Réponses: 9
    Dernier message: 22/08/2006, 12h01
  4. aide programme debutant
    Par mator dans le forum C
    Réponses: 5
    Dernier message: 20/04/2006, 19h30
  5. PERL AIDE PROGRAMMATION
    Par kiza dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2005, 16h57

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