Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur
Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/10/2012, 15h32   #1
chmek firas
 
Inscription : mai 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2012
Messages : 12
Points : -5
Points : -5
Par défaut exercice compliqué pour moi

Citation:
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.
chmek firas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2012, 21h03   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 078
Points : 11 078
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.

Citation:
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 :
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.
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h49.


 
 
 
 
Partenaires

Hébergement Web