Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parClotilde Landry Modifié depuis plus de 8 années
1
Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3
2
Département Informatique 2 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
3
Département Informatique 3 Introduction L’exécution d’un programme est rarement linéaire Certaines instructions sont exécutées Plusieurs fois (boucles) Jamais (sauts) Le programme ne se lit pas de haut en bas Il existe des instructions de branchement : Sauts conditionnels Sauts inconditionnels
4
Département Informatique 4 Saut absolu / saut relatif Il existe 2 types de sauts : Relatif (déplacement par rapport à EIP) Absolu (saut à une adresse précise) L’assembleur choisit la meilleure solution En général, relatif Avec l’op-code le plus petit
5
Département Informatique 5 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
6
Département Informatique 6 Définition Un saut inconditionnel Ne fait aucun test Toujours réalisé : EIP Nouvelle adresse Pas de modification de la pile Pas de retour prévu Instruction JMP
7
Département Informatique 7 Exemple : l’instruction JMP CodeMnemonicDescription EB cbJMP r8Déplacement ± 2 7 E9 cw JMP r16Déplacement ± 2 15 E9 cdJMP r32Déplacement ± 2 31 FF /4JMP r/m16Saut absolu vers contenu de registre/mémoire 16 bits FF /4JMP r/m32Saut absolu vers contenu de registre/mémoire 32 bits EA cdJMP 16:16Saut hors segment absolu vers segment:offset 16 bits EA cpJMP 16:32Saut hors segment absolu vers segment:offset 32 bits FF /5JMP m16:16 Saut hors segment absolu vers segment:offset 16 bits segment lu en mémoire FF /5JMP m16:32 Saut hors segment absolu vers segment:offset 32 bits segment lu en mémoire
8
Département Informatique 8 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
9
Département Informatique 9 Définition Un saut conditionnel Obéit à un test Deux possibilités : Test, puis saut si réussi Test inclus dans le saut Si test échoue Pas de branchement Continue à l’instruction suivante Instructions Jxxx avec xxx la condition Uniquement des sauts relatifs ( même segment)
10
Département Informatique 10 L’instruction CMP Compare deux opérandes Calcule en fait Destination – Source Oublie le résultat Règle les drapeaux (Flags) C : Retenue (Carry) O : Débordement (Overflow) Z : Zéro S : Signe P : Paire A : Retenue auxiliaire (sur 4 bits, cf. BCD)
11
Département Informatique 11 Sauts basiques MnémoniqueCondition (Flags)Résultat JC / JNCC = 1/0Retenue ? JO / JNOO = 1/0Débordement ? JP ou JPE / JNP ou JPO P = 1/0 Parité ? Paire/Impaire JS / JNSS = 1/0Signé ? JZ / JNZZ = 1/0Zéro ?
12
Département Informatique 12 Tests signés MnémoniqueCondition (Flags)Résultat JG,JNLEZ=0, S=O> JGE,JNLS=O≥ JL,JNGES≠O< JLE,JNGZ=1 ou S≠O≤ JE,JZZ=1= JNE,JNZZ=0≠
13
Département Informatique 13 Tests non signés MnémoniqueCondition (Flags)Résultat JA,JNBEC=0, Z=0> JAE,JNB,JNCC=0≥ JB,JC,JNAEC=1< JBE,JNAC=1 ou Z=1≤ JE,JZZ=1= JNE,JNZZ=0≠
14
Département Informatique 14 Sauts : résumé TestSignéNon Signé =JE,JZ ≠JNE,JNZ <JL,JNGEJB,JNAE,JC ≤JLE,JNGJBE,JNA >JG,JNLEJA,JNBE ≥JGE,JNLJAE,JNB,JNC
15
Département Informatique 15 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
16
Département Informatique 16 Les boucles Permettent de répéter des instructions Plusieurs fois (for…) Tant que… (while…) Jusqu’à ce que… (until…) Peuvent être réalisées Avec des sauts conditionnels Avec des instructions spécialisées loop, loope, loopz, jcxz loopne, loopnz, jecxz
17
Département Informatique 17 L’instruction LOOPcc Décrémente ECX Saute si ≠ 0 Si cc non vide (e,z,ne,nz) Possibilité de sortir avant que ECX = 0 loope, loopz : Sort si Z=1 loopne, loopnz : Sort si Z=0
18
Département Informatique 18 L’instruction JeCXZ Saute si eCX = 0 Permet de quitter une boucle loop dès le début (par exemple) Exemple : movl $0,%ecx Boucle: … loop Boucle 2 32 =4294967296 itérations !
19
Département Informatique 19 L’instruction JeCXZ (2) Exemple2 : movl $0,%ecx Boucle: jecxz Fin … loop Boucle Fin: aucune itération !
20
Département Informatique 20 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
21
Département Informatique 21 Introduction On a souvent des opérations à faire sur une suite de données simples… Les plus courantes étant des manipulations de chaînes de caractères Une chaîne sera donc : Une suite de données (8b, 16b, ou 32b) Placées à la suite les unes des autres Ex :.string "abcdefg" : 8 caractères Ex2:.short 1,2,3,4,5 : 5 mots de 16 bits
22
Département Informatique 22 Introduction (2) Plusieurs opérations possibles Modification de chaîne lods, stos Copie de chaîne movs Comparaison de chaînes cmps Analyse de chaîne scas
23
Département Informatique 23 Introduction (3) Principe de base : On travaille dans le segment ES À partir de l’offset ESI (source index) À destination de l’offset EDI (dest. index) Les commandes incrémentent / décrémentent les index AUTOMATIQUEMENT Selon le drapeau D (Direction) D=0 (instruction CLD ) : les index augmentent D=1 (instruction STD ) : les index diminuent
24
Département Informatique 24 Modification de chaîne C1:.ascii "abcd".text start: movl $C1,%esi# esi pointe sur C1 movl $C1,%edi# edi pointe sur C1 cld# on incrémente movl $4,%ecx# 4 itérations Boucle: lodsb# al caractère suivant cmpb $’a,%al# al ≥ ‘a ? jb maj# non déjà en majuscule subb $32,%al# passe en majuscule maj: stosb# range al dans C1 loop Boucle # ici, C1 contient "ABCD"
25
Département Informatique 25 Copie de chaîne C1:.ascii "abcd" C2:.ascii "efgh".text start: movl $C1,%esi# esi pointe sur C1 movl $C2,%edi# edi pointe sur C2 cld# on incrémente movl $4,%ecx# 4 itérations Boucle: movsb# (es:esi) (es:edi) loop Boucle # ici, C2 contient "abcd"
26
Département Informatique 26 Comparaison de chaînes C1:.ascii "abcd" C2:.ascii "abce".text start: movl $C1,%esi# esi pointe sur C1 movl $C2,%edi# edi pointe sur C2 cld# on incrémente movl $4,%ecx# 4 itérations Boucle: cmpsb# (es:esi) ? (es:edi) ja Grand# si (es:esi) > (es:edi) jb Petit# si (es:esi) < (es:edi) loop Boucle jmp Egal # dans cet exemple, on saute à Petit car abcd<abce
27
Département Informatique 27 Analyse de chaîne C1:.ascii "abcd".text start: movl $C1,%edi# edi pointe sur C1 cld# on incrémente movl $4,%ecx# 4 itérations max movb $’b,%al# cherche le caractère ‘b movb $0,%ah# ah 0 Boucle: incb %ah# ah ah + 1 scasb# al ? caractère suivant jb Fin# si < loop Boucle Fin: # ici ah contient 3 (position de ‘c, 1 er >‘b)
28
Département Informatique 28 Contenu du cours Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes
29
Département Informatique 29 Automatisation Très souvent, on opère sur toute la chaîne Nombre d’opérations connu Il existe 3 préfixes d’instructions de chaîne : rep repe / repz (cmps et scas uniquement) repne / repnz (cmps et scas uniquement) Ces préfixes modifient l’instruction : Ne sont pas de « vraies » instructions Exécution ECX fois de suite Ou tant que Z=1/0 (cmps et scas uniquement)
30
Département Informatique 30 Copie de chaîne automatisée C1:.ascii "abcd" C2:.ascii "efgh".text start: movl $C1,%esi# esi pointe sur C1 movl $C2,%edi# edi pointe sur C2 cld# on incrémente movl $4,%ecx# 4 itérations rep movsb# (es:esi) (es:edi) # ici, C2 contient "abcd"
31
Département Informatique 31 Comparaison de chaînes automatisée C1:.ascii "abcd" C2:.ascii "abce".text start: movl $C1,%esi# esi pointe sur C1 movl $C2,%edi# edi pointe sur C2 cld# on incrémente movl $4,%ecx# 4 itérations repe cmpsb# (es:esi) ?= (es:edi) ja Grand# si (es:esi) > (es:edi) jb Petit# si (es:esi) < (es:edi) jmp Egal # dans cet exemple, on saute à Petit car abcd<abce
32
Département Informatique 32 Initialisation d’un bloc mémoire C1:.space 10000,0.text start: movl$C1,%edi# edi pointe sur C1 cld# on incrémente movl$10000,%ecx # 10000 itérations movb$0xFF,%al# al 255 repstosb# (es:edi) al # ici, C1 pointe sur un bloc de 10000 fois # « 255 » # C’est la méthode la plus rapide connue…
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.