320 likes | 412 Views
Gestion du flux d’exécution. Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> 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.
E N D
Gestion du flux d’exécution Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3 Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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 Département Informatique
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 Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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 Département Informatique
Exemple : l’instruction JMP Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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) Département Informatique
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) Département Informatique
Sauts basiques Département Informatique
Tests signés Département Informatique
Tests non signés Département Informatique
Sauts : résumé Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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éesloop, loope, loopz, jcxz loopne, loopnz, jecxz Département Informatique
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 Département Informatique
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 232=4294967296 itérations ! Département Informatique
L’instruction JeCXZ (2) • Exemple2 : movl $0,%ecx Boucle: jecxz Fin … loop Boucle Fin: aucune itération ! Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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 Département Informatique
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 Département Informatique
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 Département Informatique
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" Département Informatique
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" Département Informatique
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 Département Informatique
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, 1er<‘b) Département Informatique
Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes Département Informatique
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) Département Informatique
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" Département Informatique
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 Département Informatique
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 rep stosb # (es:edi) al # ici, C1 pointe sur un bloc de 10000 fois # « 255 » # C’est la méthode la plus rapide connue… Département Informatique