Gestion du flux dexcution Laurent JEANPIERRE jeanpliutc 3

  • Slides: 32
Download presentation
Gestion du flux d’exécution Laurent JEANPIERRE <jeanpl@iutc 3. unicaen. fr> D’après le cours de

Gestion du flux d’exécution Laurent JEANPIERRE <jeanpl@iutc 3. unicaen. fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3 Département Informatique

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 2

Introduction L’exécution d’un programme est rarement linéaire l Certaines instructions sont exécutées l l

Introduction L’exécution d’un programme est rarement linéaire l Certaines instructions sont exécutées l l l Plusieurs fois (boucles) Jamais (sauts) l Le programme ne se lit pas de haut en bas l Il existe des instructions de branchement : l l Sauts conditionnels Sauts inconditionnels Département Informatique 3

Saut absolu / saut relatif l Il existe 2 types de sauts : Relatif

Saut absolu / saut relatif l Il existe 2 types de sauts : Relatif (déplacement par rapport à EIP) l Absolu (saut à une adresse précise) l l L’assembleur choisit la meilleure solution En général, relatif l Avec l’op-code le plus petit l Département Informatique 4

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 5

Définition Un saut inconditionnel l Ne fait aucun test l Toujours réalisé : l

Définition Un saut inconditionnel l Ne fait aucun test l Toujours réalisé : l EIP Nouvelle adresse l Pas de modification de la pile l Pas de retour prévu l Instruction JMP Département Informatique 6

Exemple : l’instruction JMP Code Mnemonic Description EB cb JMP r 8 Déplacement ±

Exemple : l’instruction JMP Code Mnemonic Description EB cb JMP r 8 Déplacement ± 27 E 9 cw JMP r 16 Déplacement ± 215 E 9 cd JMP r 32 Déplacement ± 231 FF /4 JMP r/m 16 Saut absolu vers contenu de registre/mémoire 16 bits FF /4 JMP r/m 32 Saut absolu vers contenu de registre/mémoire 32 bits EA cd JMP 16: 16 Saut hors segment absolu vers segment: offset 16 bits EA cp JMP 16: 32 Saut hors segment absolu vers segment: offset 32 bits FF /5 JMP m 16: 16 Saut hors segment absolu vers segment: offset 16 bits segment lu en mémoire FF /5 JMP m 16: 32 Saut hors segment absolu vers segment: offset 32 bits segment lu en mémoire Département Informatique 7

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 8

Définition Un saut conditionnel l Obéit à un test l Deux possibilités : l

Définition Un saut conditionnel l Obéit à un test l Deux possibilités : l l l Si test échoue l l l Test, puis saut si réussi Test inclus dans le saut Pas de branchement Continue à l’instruction suivante Instructions Jxxx avec xxx la condition l Uniquement des sauts relatifs ( même segment) Département Informatique 9

L’instruction CMP l Compare deux opérandes Calcule en fait Destination – Source l Oublie

L’instruction CMP l Compare deux opérandes Calcule en fait Destination – Source l Oublie le résultat l l Règle les drapeaux (Flags) C : Retenue (Carry) l O : Débordement (Overflow) l Z : Zéro l S : Signe l P : Paire l A : Retenue auxiliaire (sur 4 bits, cf. BCD) l Département Informatique 10

Sauts basiques Mnémonique Condition (Flags) Résultat JC / JNC C = 1/0 Retenue ?

Sauts basiques Mnémonique Condition (Flags) Résultat JC / JNC C = 1/0 Retenue ? JO / JNO O = 1/0 Débordement ? JP ou JPE / JNP ou JPO P = 1/0 Parité ? Paire/Impaire JS / JNS S = 1/0 Signé ? JZ / JNZ Z = 1/0 Zéro ? Département Informatique 11

Tests signés Mnémonique Condition (Flags) Résultat JG, JNLE Z=0, S=O > JGE, JNL S=O

Tests signés Mnémonique Condition (Flags) Résultat JG, JNLE Z=0, S=O > JGE, JNL S=O ≥ JL, JNGE S≠O < JLE, JNG Z=1 ou S≠O ≤ JE, JZ Z=1 = JNE, JNZ Z=0 ≠ Département Informatique 12

Tests non signés Mnémonique Condition (Flags) Résultat JA, JNBE C=0, Z=0 > JAE, JNB,

Tests non signés Mnémonique Condition (Flags) Résultat JA, JNBE C=0, Z=0 > JAE, JNB, JNC C=0 ≥ JB, JC, JNAE C=1 < JBE, JNA C=1 ou Z=1 ≤ JE, JZ Z=1 = JNE, JNZ Z=0 ≠ Département Informatique 13

Sauts : résumé Test Signé Non Signé = JE, JZ ≠ JNE, JNZ <

Sauts : résumé Test Signé Non Signé = JE, JZ ≠ JNE, JNZ < JL, JNGE JB, JNAE, JC ≤ JLE, JNG JBE, JNA > JG, JNLE JA, JNBE ≥ JGE, JNL JAE, JNB, JNC Département Informatique 14

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 15

Les boucles l Permettent de répéter des instructions Plusieurs fois (for…) l Tant que…

Les boucles l Permettent de répéter des instructions Plusieurs fois (for…) l Tant que… (while…) l Jusqu’à ce que… (until…) l l Peuvent être réalisées Avec des sauts conditionnels l Avec des instructions spécialisées loop, loope, loopz, jcxz loopne, loopnz, jecxz l Département Informatique 16

L’instruction LOOPcc l Décrémente ECX l Saute si ≠ 0 l Si cc non

L’instruction LOOPcc l Décrémente ECX l Saute si ≠ 0 l Si cc non vide (e, z, ne, nz) Possibilité de sortir avant que ECX = 0 l loope, loopz : Sort si Z=1 l loopne, loopnz : Sort si Z=0 l Département Informatique 17

L’instruction Je. CXZ l Saute si e. CX = 0 l Permet de quitter

L’instruction Je. CXZ l Saute si e. CX = 0 l Permet de quitter une boucle loop dès le début (par exemple) l Exemple : movl Boucle: … loop $0, %ecx Boucle 232=4294967296 itérations ! Département Informatique 18

L’instruction Je. CXZ (2) l Exemple 2 : movl Boucle: jecxz … loop Fin:

L’instruction Je. CXZ (2) l Exemple 2 : movl Boucle: jecxz … loop Fin: $0, %ecx Fin Boucle aucune itération ! Département Informatique 19

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 20

Introduction On a souvent des opérations à faire sur une suite de données simples…

Introduction On a souvent des opérations à faire sur une suite de données simples… l Les plus courantes étant des manipulations de chaînes de caractères l l Une chaîne sera donc : l l Une suite de données (8 b, 16 b, ou 32 b) Placées à la suite les unes des autres Ex : . string "abcdefg" : 8 caractères Ex 2: . short 1, 2, 3, 4, 5 : 5 mots de 16 bits Département Informatique 21

Introduction (2) l Plusieurs opérations possibles l Modification de chaîne l lods, stos l

Introduction (2) l Plusieurs opérations possibles l Modification de chaîne l lods, stos l Copie de chaîne l movs l Comparaison de chaînes l cmps l Analyse de chaîne l scas Département Informatique 22

Introduction (3) Principe de base : l On travaille dans le segment ES l

Introduction (3) Principe de base : l On travaille dans le segment ES l À partir de l’offset ESI (source index) l À destination de l’offset EDI (dest. index) l Les commandes incrémentent / décrémentent les index AUTOMATIQUEMENT l l l Selon le drapeau D (Direction) D=0 (instruction CLD) : les index augmentent D=1 (instruction STD) : les index diminuent Département Informatique 23

Modification de chaîne C 1: . ascii "abcd". text start: movl $C 1, %esi

Modification de chaîne C 1: . ascii "abcd". text start: movl $C 1, %esi # esi pointe sur C 1 movl $C 1, %edi # edi pointe sur C 1 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 C 1 loop Boucle # ici, C 1 contient "ABCD" Département Informatique 24

Copie de chaîne C 1: C 2: . ascii. text start: movl cld movl

Copie de chaîne C 1: C 2: . ascii. text start: movl cld movl Boucle: movsb loop "abcd" "efgh" $C 1, %esi $C 2, %edi $4, %ecx # esi pointe sur C 1 # edi pointe sur C 2 # on incrémente # 4 itérations # (es: esi) (es: edi) Boucle # ici, C 2 contient "abcd" Département Informatique 25

Comparaison de chaînes C 1: C 2: . ascii. text start: movl cld movl

Comparaison de chaînes C 1: C 2: . ascii. text start: movl cld movl Boucle: cmpsb ja jb loop jmp "abcd" "abce" $C 1, %esi $C 2, %edi $4, %ecx Grand Petit Boucle Egal # esi pointe sur C 1 # edi pointe sur C 2 # on incrémente # 4 itérations # (es: esi) ? (es: edi) # si (es: esi) > (es: edi) # si (es: esi) < (es: edi) # dans cet exemple, on saute à Petit car abcd<abce Département Informatique 26

Analyse de chaîne C 1: . ascii "abcd". text start: movl $C 1, %edi

Analyse de chaîne C 1: . ascii "abcd". text start: movl $C 1, %edi cld movl $4, %ecx movb $’b, %al movb $0, %ah Boucle: incb %ah scasb jb Fin loop Boucle Fin: # edi pointe sur C 1 # on incrémente # 4 itérations max # cherche le caractère ‘b # ah 0 # ah + 1 # al ? caractère suivant # si < # ici ah contient 3 (position de ‘c, 1 er<‘b) Département Informatique 27

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles

Contenu du cours l Introduction l Sauts inconditionnels l Sauts conditionnels l Les boucles l Opérations sur les chaînes l Automatisation des chaînes Département Informatique 28

Automatisation Très souvent, on opère sur toute la chaîne l Nombre d’opérations connu l

Automatisation Très souvent, on opère sur toute la chaîne l Nombre d’opérations connu l Il existe 3 préfixes d’instructions de chaîne : l l l repe / repz (cmps et scas uniquement) repne / repnz (cmps et scas uniquement) Ces préfixes modifient l’instruction : l l l Ne sont pas de « vraies » instructions Exécution ECX fois de suite Ou tant que Z=1/0 (cmps et scas uniquement) Département Informatique 29

Copie de chaîne automatisée C 1: C 2: . ascii "abcd". ascii "efgh". text

Copie de chaîne automatisée C 1: C 2: . ascii "abcd". ascii "efgh". text start: movl $C 1, %esi movl $C 2, %edi cld movl $4, %ecx rep movsb # esi pointe sur C 1 # edi pointe sur C 2 # on incrémente # 4 itérations # (es: esi) (es: edi) # ici, C 2 contient "abcd" Département Informatique 30

Comparaison de chaînes automatisée C 1: C 2: . ascii. text start: movl cld

Comparaison de chaînes automatisée C 1: C 2: . ascii. text start: movl cld movl repe ja jb jmp "abcd" "abce" $C 1, %esi $C 2, %edi $4, %ecx cmpsb Grand Petit Egal # esi pointe sur C 1 # edi pointe sur C 2 # on incrémente # 4 itérations # (es: esi) ? = (es: edi) # si (es: esi) > (es: edi) # si (es: esi) < (es: edi) # dans cet exemple, on saute à Petit car abcd<abce Département Informatique 31

Initialisation d’un bloc mémoire C 1: . space 10000, 0. text start: movl $C

Initialisation d’un bloc mémoire C 1: . space 10000, 0. text start: movl $C 1, %edi # edi pointe sur C 1 cld # on incrémente movl $10000, %ecx # 10000 itérations movb $0 x. FF, %al # al 255 rep stosb # (es: edi) al # ici, C 1 pointe sur un bloc de 10000 fois # « 255 » # C’est la méthode la plus rapide connue… Département Informatique 32