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 :

exercice compliqué pour moi


Sujet :

Assembleur

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 12
    Points : 6
    Points
    6
    Par défaut exercice compliqué pour moi
    mov bx,0110H
    mov somme,0
    mov cx,10
    rep:mov ax,[bx]
    add ax,somme
    mov somme,ax
    inc bx
    dec cx
    jne rep
    mes questions sont:
    -qu'est ce programme fait?
    -combien de boucles fait il?
    -par quoi peut on remplacer les deux derniers instructions?
    si on fera les hypotheses simplificatrices suivantes:
    le cpu met le mm temps ti pour executer chaque instruction ;un accés à la mémoire principale (mp) necessiteTmp;les codes et operandes des instructions sont au depart en MP,et chaqueinstruction necessite un seul accés en MP pour lire code et operande .une instruction comme mov cx,10 prend Ti+Tmp,et une instruction comme ADD,AX,SOMME le tempsTi+Tmp+Tmp.
    5-calculer le temps d'execution de ce programme en fonction de Ti et Tmp.

    svp repondez moi ,parce ce que vraiement le cours que le professeur nous a donné n'a aucune relation avec ça(il est toujours encore d'expliquer le mode de fonctionnement de microproce 8086 et non pas la langage elle mm) et pourtant il nous a demandé de travailler l'exercice .i'ai vu beaucoup de cours sur le net mais c'est vraiement difficile de comprendre tout seul.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonsoir,

    Citation Envoyé par chmek firas Voir le message
    svp repondez moi ,parce ce que vraiement le cours que le professeur nous a donné n'a aucune relation avec ça(il est toujours encore d'expliquer le mode de fonctionnement de microproce 8086 et non pas la langage elle mm) et pourtant il nous a demandé de travailler l'exercice .i'ai vu beaucoup de cours sur le net mais c'est vraiement difficile de comprendre tout seul.
    L'assembleur n'est pas un seul langage unique et normalisé, c'est le jeu d'instructions que ton micro-processeur est capable de reconnaître. Tous les assembleurs fonctionnent donc selon le même principe global mais les instructions et les modes d'adressage sont propres à la famille de micro-processeurs que tu utilises.

    mes questions sont:
    -qu'est ce programme fait?
    -combien de boucles fait il?
    -par quoi peut on remplacer les deux derniers instructions?
    si on fera les hypotheses simplificatrices suivantes:
    le cpu met le mm temps ti pour executer chaque instruction ;un accés à la mémoire principale (mp) necessiteTmp;les codes et operandes des instructions sont au depart en MP,et chaqueinstruction necessite un seul accés en MP pour lire code et operande .une instruction comme mov cx,10 prend Ti+Tmp,et une instruction comme ADD,AX,SOMME le tempsTi+Tmp+Tmp.
    5-calculer le temps d'execution de ce programme en fonction de Ti et Tmp.
    On ne fera pas ton travail à ta place, mais on peut t'aider à trouver les réponses par toi-même. Vois déjà ceci :

    http://www.iut-arles.up.univ-mrs.fr/...Archi/asm.html

    Tu y trouveras une description brève de chaque instruction. Ensuite, c'est plus facile si on met les bonnes indentations à ton programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            mov     bx,0110H
            mov     somme,0
            mov     cx,10
    rep:    mov     ax,[bx]
            add     ax,somme
            mov     somme,ax
            inc     bx
            dec     cx
            jne     rep
    Dans ton code, « rep » est une étiquette (label en anglais) et son nom est un très mauvais choix car il est déjà utilisé pour représenter une instruction du x86, qui sert en plus à faire quelque chose de similaire. Mais d'une manière générale, lorsqu'une ligne commence par un mot immédiatement suivi d'un deux-points « : », c'est qu'il s'agit d'une étiquette.

    Cette étiquette est un symbole défini par le compilateur qui prend automatiquement pour valeur l'adresse mémoire où se trouve l'instruction qui la suit. C'est donc un point de repère qui permet de faire un saut à cette adresse ou d'y lire une donnée.

    « JNE » signifie Jump if Not Equal et fait partie de la collection de sauts conditionnels que tu trouveras sur la même page : http://www.iut-arles.up.univ-mrs.fr/...i/asm.html#jcc

    En assembleur, pour vérifier une condition, on fait un test ou une opération quelconque, lesquels mettent automatiquement un certain nombre de flags à jour, comme le bit Z (indicateur de zéro) qui se met automatiquement à 1 si le résultat de la dernière opération est nul. Parallèlement, tu disposes d'un jeu donné de sauts conditionnels, lesquels effectuent effectivement le saut si les flags en question ont la bonne valeur.

    En particulier, pour vérifier si deux nombres sont égaux ou pas, on soustrait l'un à l'autre et on regarde si le résultat est nul ou pas. Donc les mnémoniques « JNE » (Jump if Not Equal) et « JNZ » (Jump if Not Zero) sont équivalents, sont traduits par le même code-opération en mémoire et effectuent le saut si le bit Z vaut 0, indiquant ainsi que la dernière valeur obtenue n'est PAS nulle.

    « DEC » signifie Decrement et retire une unité à son opérande. Comme cette instruction est ici immédiatement suivie d'un JNZ, on comprend que le saut aura lieu si CX n'est pas nul, et qu'il s'agit donc d'une boucle.

    Fort de ces informations, utilise la table derrière le lien que je t'ai fourni pour voir à quoi sert chacune des instructions de ton programme. De là, tu devrais réussir à comprendre à quoi il sert.

Discussions similaires

  1. Requete un peu compliqué pour moi
    Par passie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2006, 15h08
  2. [SQL - ORACLE] Requete un peu compliquée (pour moi)
    Par Worldofdada dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/11/2005, 08h25
  3. Requête un peu trop compliqué pour moi
    Par Kokito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2005, 15h17

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