Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Tests et Validation du logiciel
Le Concept du programme enregistré
Initiation à la programmation et algorithmique cours 2
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
Introduction à l’Algorithmique
Les Structures de contrôles itératives
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
merci Laurent JEANPIERRE
Assembleur
Le Concept du programme enregistré
5. Les structures répétitives
Système d’exploitation : Assembleur
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Système d’exploitation : Assembleur
Système d’exploitation : Assembleur
Système d’exploitation : Assembleur
Les bases de l’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Structures de contrôle de l’exécution
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Python La structure itérative
LE MICROPROCESSEUR 8086/8088 Architecture externe du 8086
Algorithmique et Programmation
Sécurité et Buffer Overflow
Les structure d’un programme :
Introduction à l’algorithmique
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
Chapitre 9 Les sous-programmes.
Répéter dans un programme avec une Instruction itérative
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
L’essentiel du langage C
Calcul de Factoriel Code prit sur . 15/02/09
Les bases de l’assembleur
La Boucle Repeat Cours LCS N°1 Présenté par Mr: LALLALI.
Cours Architecture des Systèmes Informatiques
Un survol du language C.
3-Présentation d’un µP simple
Architectures des ordinateurs
Cours n° 3 Traitements en Java
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
1. Ook Christophe Delagarde, septembre 1999 I.U.T., Université de la Méditerrainée 2.
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Les structures de contrôle
UE MAREP Cours 5 : Structures de contrôle représentées en assembleur
Patricia Renault UPMC 2005/2006
Module algorithmique et programmation
La pile de crêpes.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
Les instructions de contrôle
Chapitre 4 La représentation des nombres.
Chapitre 3 L’accès aux données.
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
Philippe Gandy – 6 octobre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
PhP 2. Tableaux et structures de contrôle. Les tableaux Définition –Rassemblement d’un ensemble de valeurs portant le même nom de variable –Types de tableaux.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
Le langage Ladder Le langage Ladder
O UTILS DE P ROGRAMMATION P OUR LES M ATHÉMATIQUES Mr. BENDIB. I MAA, LAMIS Laboratory, Université Larbi Tébessi - Tébessa.
Département Informatique Les modes d’adressage Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.
Transcription de la présentation:

Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE 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 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

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 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 ?

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≠

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≠

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

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ées loop, 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  2 32 = 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, 1 er >‘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 # itérations movb$0xFF,%al# al  255 repstosb# (es:edi)  al # ici, C1 pointe sur un bloc de fois # « 255 » # C’est la méthode la plus rapide connue…