1 / 32

Gestion du flux d’exécution

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.

erik
Télécharger la présentation

Gestion du flux d’exécution

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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 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 Département Informatique

  5. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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 Département Informatique

  7. Exemple : l’instruction JMP Département Informatique

  8. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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) 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) Département Informatique

  11. Sauts basiques Département Informatique

  12. Tests signés Département Informatique

  13. Tests non signés Département Informatique

  14. Sauts : résumé Département Informatique

  15. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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éesloop, loope, loopz, jcxz loopne, loopnz, jecxz 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 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  232=4294967296 itérations ! Département Informatique

  19. L’instruction JeCXZ (2) • Exemple2 : movl $0,%ecx Boucle: jecxz Fin … loop Boucle Fin:  aucune itération ! Département Informatique

  20. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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 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 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 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" 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" 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 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, 1er<‘b) Département Informatique

  28. Contenu du cours • Introduction • Sauts inconditionnels • Sauts conditionnels • Les boucles • Opérations sur les chaînes • Automatisation des chaînes 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) 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" 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 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 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

More Related