Gestion du flux d’exécution

32
Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE <[email protected]> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3

description

Gestion du flux d’exécution. Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. Contenu du cours. Introduction Sauts inconditionnels Sauts conditionnels Les boucles Opérations sur les chaînes Automatisation des chaînes. Introduction. - PowerPoint PPT Presentation

Transcript of Gestion du flux d’exécution

Page 1: Gestion du flux d’exécution

Département Informatique

Gestion du flux d’exécution

Laurent JEANPIERRE <[email protected]>

D’après le cours de Pascal FOUGERAY

IUT de CAEN – Campus 3

Page 2: Gestion du flux d’exécution

Département Informatique 2

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 3: Gestion du flux d’exécution

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

Page 4: Gestion du flux d’exécution

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 solutionEn général, relatifAvec l’op-code le plus petit

Page 5: Gestion du flux d’exécution

Département Informatique 5

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 6: Gestion du flux d’exécution

Département Informatique 6

Définition

Un saut inconditionnelNe fait aucun testToujours réalisé :

EIP Nouvelle adressePas de modification de la pile

Pas de retour prévu

Instruction JMP

Page 7: Gestion du flux d’exécution

Département Informatique 7

Exemple : l’instruction JMP

Code Mnemonic Description

EB cb JMP r8 Déplacement ± 27

E9 cw JMP r16 Déplacement ± 215

E9 cd JMP r32 Déplacement ± 231

FF /4 JMP r/m16 Saut absolu vers contenu de registre/mémoire 16 bits

FF /4 JMP r/m32 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 m16:16 Saut hors segment absolu vers segment:offset 16 bitssegment lu en mémoire

FF /5 JMP m16:32 Saut hors segment absolu vers segment:offset 32 bitssegment lu en mémoire

Page 8: Gestion du flux d’exécution

Département Informatique 8

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 9: Gestion du flux d’exécution

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)

Page 10: Gestion du flux d’exécution

Département Informatique 10

L’instruction CMP

Compare deux opérandesCalcule en fait Destination – SourceOublie le résultat

Règle les drapeaux (Flags)C : Retenue (Carry)O : Débordement (Overflow)Z : ZéroS : SigneP : PaireA : Retenue auxiliaire (sur 4 bits, cf. BCD)

Page 11: Gestion du flux d’exécution

Département Informatique 11

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/0Parité ?

Paire/Impaire

JS / JNS S = 1/0 Signé ?

JZ / JNZ Z = 1/0 Zéro ?

Page 12: Gestion du flux d’exécution

Département Informatique 12

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 ≠

Page 13: Gestion du flux d’exécution

Département Informatique 13

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 ≠

Page 14: Gestion du flux d’exécution

Département Informatique 14

Sauts : résumé

Test Signé Non Signé

= JE,JZ JE,JZ

≠ JNE,JNZ JNE,JNZ

< JL,JNGE JB,JNAE,JC

≤ JLE,JNG JBE,JNA

> JG,JNLE JA,JNBE

≥ JGE,JNL JAE,JNB,JNC

Page 15: Gestion du flux d’exécution

Département Informatique 15

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 16: Gestion du flux d’exécution

Département Informatique 16

Les boucles

Permettent de répéter des instructionsPlusieurs fois (for…)Tant que… (while…)Jusqu’à ce que… (until…)

Peuvent être réalisées Avec des sauts conditionnelsAvec des instructions spécialiséesloop, loope, loopz, jcxz loopne, loopnz, jecxz

Page 17: Gestion du flux d’exécution

Département Informatique 17

L’instruction LOOPcc

Décrémente ECXSaute 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

Page 18: Gestion du flux d’exécution

Département Informatique 18

L’instruction JeCXZ

Saute si eCX = 0Permet de quitter une boucle loop dès

le début (par exemple)Exemple :

movl $0,%ecx

Boucle:

loop Boucle

232=4294967296 itérations !

Page 19: Gestion du flux d’exécution

Département Informatique 19

L’instruction JeCXZ (2)

Exemple2 :movl $0,%ecx

Boucle:

jecxz Fin

loop Boucle

Fin:

aucune itération !

Page 20: Gestion du flux d’exécution

Département Informatique 20

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 21: Gestion du flux d’exécution

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

Page 22: Gestion du flux d’exécution

Département Informatique 22

Introduction (2)

Plusieurs opérations possiblesModification de chaîne

lods, stosCopie de chaîne

movsComparaison de chaînes

cmpsAnalyse de chaîne

scas

Page 23: Gestion du flux d’exécution

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

Page 24: Gestion du flux d’exécution

Département Informatique 24

Modification de chaîneC1: .ascii "abcd"

.textstart:

movl $C1,%esi # esi pointe sur C1movl $C1,%edi # edi pointe sur C1 cld # on incrémentemovl $4,%ecx # 4 itérations

Boucle:lodsb # al caractère suivantcmpb $’a,%al # al ≥ ‘a ?jb maj # non déjà en

majusculesubb $32,%al # passe en majuscule

maj:stosb # range al dans C1loop Boucle# ici, C1 contient "ABCD"

Page 25: Gestion du flux d’exécution

Département Informatique 25

Copie de chaîneC1: .ascii "abcd"C2: .ascii "efgh"

.textstart:

movl $C1,%esi # esi pointe sur C1movl $C2,%edi # edi pointe sur C2 cld # on incrémentemovl $4,%ecx # 4 itérations

Boucle:movsb # (es:esi) (es:edi)loop Boucle

# ici, C2 contient "abcd"

Page 26: Gestion du flux d’exécution

Département Informatique 26

Comparaison de chaînesC1: .ascii "abcd"C2: .ascii "abce"

.textstart:

movl $C1,%esi # esi pointe sur C1movl $C2,%edi # edi pointe sur C2 cld # on incrémentemovl $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 Bouclejmp Egal

# dans cet exemple, on saute à Petit car abcd<abce

Page 27: Gestion du flux d’exécution

Département Informatique 27

Analyse de chaîneC1: .ascii "abcd"

.textstart:

movl $C1,%edi # edi pointe sur C1cld # on incrémentemovl $4,%ecx # 4 itérations maxmovb $’b,%al # cherche le caractère ‘bmovb $0,%ah # ah 0

Boucle:incb %ah # ah ah + 1scasb # al ? caractère suivantjb Fin # si < loop Boucle

Fin:

# ici ah contient 3 (position de ‘c, 1er<‘b)

Page 28: Gestion du flux d’exécution

Département Informatique 28

Contenu du cours

Introduction

Sauts inconditionnels

Sauts conditionnels

Les boucles

Opérations sur les chaînes

Automatisation des chaînes

Page 29: Gestion du flux d’exécution

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)

Page 30: Gestion du flux d’exécution

Département Informatique 30

Copie de chaîne automatisée

C1: .ascii "abcd"C2: .ascii "efgh"

.textstart:

movl $C1,%esi # esi pointe sur C1movl $C2,%edi # edi pointe sur C2 cld # on incrémentemovl $4,%ecx # 4 itérationsrep movsb # (es:esi)

(es:edi)

# ici, C2 contient "abcd"

Page 31: Gestion du flux d’exécution

Département Informatique 31

Comparaison de chaînes automatisée

C1: .ascii "abcd"C2: .ascii "abce"

.textstart:

movl $C1,%esi # esi pointe sur C1movl $C2,%edi # edi pointe sur C2 cld # on incrémentemovl $4,%ecx # 4 itérationsrepe 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

Page 32: Gestion du flux d’exécution

Département Informatique 32

Initialisation d’un bloc mémoire

C1: .space 10000,0.text

start:movl $C1,%edi # edi pointe sur C1cld # on incrémentemovl $10000,%ecx # 10000

itérationsmovb $0xFF,%al # al 255rep stosb # (es:edi) al

# ici, C1 pointe sur un bloc de 10000 fois # « 255 »# C’est la méthode la plus rapide connue…