UE MAREP Cours 5 : Structures de contrôle représentées en assembleur

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Architecture de machines Le microprocesseur
Rappels C.
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
Algorithmes et structures de données Cours 3
Introduction à l’Algorithmique
DECLARATION DE VARIABLES
Les Structures de contrôles itératives
Plan du cours : 2ème Partie
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
5. Les structures répétitives
Section VI Structures répétitives (suite)
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).
Semaine #1 INF155 par Frédérick Henri.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Structures de contrôle de l’exécution
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Python La structure itérative
Algorithmique et Programmation
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
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.
Semaine #1 INF135 par Frédérick Henri.
Architecture et technologie des ordinateurs II
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.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
L’essentiel du langage C
Chapitre 9 : La machine MIASM
Arbre programmatique Une notation.
Cours Architecture des Systèmes Informatiques
Un survol du language C.
3-Présentation d’un µP simple
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Structures de contrôle
Architectures des ordinateurs
Les Machines RAM.
Cours n° 3 Traitements en Java
Structures de contrôle
Le MIPS Microprocesseur RISC débuts en 1985, gamme de processeurs :
Architecture et technologie des ordinateurs II
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.
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
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
UE MAREP Cours 12 : Révisions
UE MAREP Cours 8 : La pile d’exécution (Fonctions imbriquées et fonctions récursives) Patricia Renault UPMC 2005/2006.
UE MAREP Cours 9 : Tableaux
Patricia Renault UPMC 2005/2006
Patricia Renault UPMC 2005/2006
Patricia Renault UPMC 2004/2005
Patricia Renault UPMC 2005/2006
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
Les instructions de contrôle
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.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
14/08/2013JC/LP/MD1 TP3 Enoncé. 14/08/2013JC/LP/MD2 Objectif Gérer la liaison série avec la réception en interruption On utilisera le Hardware Vector.
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Étapes pour la Programmation du 68HC11 I. Écriture du programme dans un fichier *.a11 II. Le programme est compilé (traduit en langage machine) III. Le.
Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.
Transcription de la présentation:

UE MAREP Cours 5 : Structures de contrôle représentées en assembleur Patricia Renault UPMC 2005/2006

Plan Nécessité de la rupture de séquence Exemple de programme sans rupture de séquence Exemple de programme avec rupture de séquence Sauts conditionnels et inconditionnels Détermination de l’adresse de saut Réalisation des structures de contrôle des langages de haut niveau à l’aide de saut Code ASCII

Exemple de programme sans rupture de séquence .data .stack .text __start: PC <= 0x00400000 xor $3, $3, $3 0x00400000 : $3 = 0 xor $4, $4, $4 0x00400004 : $4 = 0 addi $3, $3, 1 0x00400008 : $3 = 1 add $4, $4, $3 0x0040000c : $4 = 1 addi $3, $3, 1 0x00400010 : $3 = 2 add $4, $4, $3 0x00400014 : $4 = 3 addi $3, $3, 1 0x00400018 : $3 = 3 add $4, $4, $3 0x0040001c : $4 = 6 ori $2, $0, 10 0x00400020 : $2 = 10 syscall 0x00400024 

Exemple de programme avec rupture de séquence .data .stack .text __start: PC <= 0x00400000 xor $3, $3, $3 0x00400000 : $3 = 0 xor $4, $4, $4 0x00400004 : $4 = 0 debut: addi $3, $3, 1 0x00400008 : $3 = 1, 2, 3, … add $4, $4, $3 0x0040000c : $4 = 1, 3, 6, … j debut 0x00400010 : ori $2, $0, 10 0x00400014 : $2 = 10 syscall 0x00400018 :

Nécessité de la rupture de séquence Comment sortir de la boucle après 3 itérations ? Saut conditionnel Utiliser un registre initialisé à 3, lui soustraire 1 avant chaque branchement conditionnel, se brancher en début de boucle si le registre compteur n’a pas atteint la valeur 0. Utiliser un registre initialisé à 0, lui ajouter 1 avant chaque branchement conditionnel, se brancher en début de boucle si le registre compteur n’a pas atteint la valeur 3.

Plan Nécessité de la rupture de séquence Sauts inconditionnels et conditionnels Instructions MIPS Exemples Détermination de l’adresse de saut Réalisation des structures de contrôle des langages de haut niveau à l’aide de saut Code ASCII

Déplacement en séquence = Aller à l’instruction suivante Instructions MIPS Inconditionnels : Valeur de PC systématiquement modifiée. 2 formes : j label, met dans PC la valeur associée à l’étiquette label jr Ri, met dans PC la valeur contenue dans le registre Ri Conditionnels : Tests d’égalité ou de différence de contenu de deux registres beq $2, $3, fin, (branch if equal) si $2=$3 alors branchement à l’étiquette fin, sinon déplacement en séquence bne $2, $3, fin, (branch in not equal) si $2$3 alors branchement à l’étiquette fin, sinon déplacement en séquence Déplacement en séquence = Aller à l’instruction suivante

Instructions MIPS Conditionnels : Comparaison d’une valeur par rapport à 0 bgez $3, label, (branch if greater or equal than zero) si $3>=0 alors branchement à l’étiquette label, sinon déplacement en séquence bgtz $3, label, (branch if greater than zero) si $3>0 alors branchement à l’étiquette label, sinon déplacement en séquence blez $3, label, (branch if less or equal than zero) si $3<=0 alors branchement à l’étiquette label, sinon déplacement en séquence bltz $3, label, (branch if less than zero) si $3<0 alors branchement à l’étiquette label, sinon déplacement en séquence

Instructions MIPS Conditionnels : Comparaison de deux valeurs non nulles slt $2, $3, $4, (set if less than) comparaison signée, met 1 dans $2, si $3<$4, met 0 sinon sltu $2, $3, $4, (set if less than) comparaison non signée, met 1 dans $2, si $3<$4, met 0 sinon

Exemple .data .stack .text __start: ori $3, $0, 3 #$3 = 3 xor $4, $4, $4 #$4 = 0 debut: add $4, $4, $3 #$4 = 3, 5 puis 6 addi $3, $3, -1 #$3 = 2, 1 puis 0 bgtz $3, debut ori $2, $0, 10 syscall

Exemple .data .stack .text __start: xor $3, $3, $3 #$3 = 0 ori $5, $0, 3 #$5 = 3 debut: addi $3, $3, 1 #$3 = 1, 2 puis 3 add $4, $4, $3 #$4 = 1, 3 puis 6 bne $3, $5, debut ori $2, $0, 10 syscall

Exemples Saut à l’adresse label si $2<$3 slt $4, $2, $3 bne $4, $0, label Saut à l’adresse label si $2=<$3 slt $4, $3, $2 beq $4, $0, label Saut à l’adresse label si $2>$3 slt $4, $3, $2 bne $4, $0, label Saut à l’adresse label si $2>=$3 slt $4, $2, $3 beq $4, $0, label

Plan Nécessité de la rupture de séquence Sauts Détermination de l’adresse de saut Réalisation des structures de contrôle des langages de haut niveau à l’aide de saut Code ASCII

Détermination de l’adresse de saut Deux formes d’adressage : absolu : concerne uniquement les instructions de format J. Le label (sur 26 bits) est une partie de l’adresse à laquelle il faut se brancher. (ex : j label donne PC := PC 31 :28 || I * 4) relatif : concerne les instructions Bxx. Le déplacement est relatif à la valeur actuelle de PC (ex : bne Rx, Ry, label donne PC := PC + 4 + (I * 4) ) 000010 Immédiat sur 26 bits 000101 Rx Ry Immédiat sur 16 bits

Détermination de l’adresse de saut Nécessite de connaître les adresses d’implantation des instructions pour pouvoir déterminer la valeur du champs immédiat (I) dans les formats J et I pour les sauts => la compilation nécessite deux passes l’une implante toutes les instructions, sur 32 bits, en laissant les champs I à une valeur qui n’est pas définitive puis une fois toutes les instructions implantées, les adressages absolus sont résolus (il suffit de placer la partie de l’adresse de l’instruction vers laquelle on saute dans le champs i de l’instruction de saut), et les décalages des adressages relatifs sont calculés (en fonction de l’adresse de l’instruction de saut et de l’adresse de l’instruction vers laquelle on saute).

Détermination de l’adresse de saut Première passe .data .stack .text fin: ori $2, $0, 10 0x00400000 0x3402000a syscall 0x00400004 0x0000000c __start: PC <= 0x00400008 xor $3, $3, $3 0x00400008 0x00631826 xor $4, $4, $4 0x0040000c 0x00842026 ori $5, $0, 3 0x00400010 0x34050003 deb: addi $3, $3, 1 0x00400014 0x20630001 add $4, $4, $3 0x00400018 0x00832020 bne $3, $5,deb 0x0040001c 0x1465XXXX j fin 0x00400020 0b000010BBBBBBBB…B 26 bits

Détermination de l’adresse de saut Seconde passe .data .stack .text fin: ori $2, $0, 10 0x00400000 0x3402000a syscall 0x00400004 0x0000000c __start: PC <= 0x00400008 xor $3, $3, $3 0x00400008 0x00631826 xor $4, $4, $4 0x0040000c 0x00842026 ori $5, $0, 3 0x00400010 0x34050003 deb: addi $3, $3, 1 0x00400014 0x20630001 add $4, $4, $3 0x00400018 0x00832020 bne $3, $5,deb 0x0040001c 0x1465FFFD j fin 0x00400020 0x08100000

Plan Nécessité de la rupture de séquence Sauts Détermination de l’adresse de saut Réalisation des structures de contrôle des langages de haut niveau à l’aide de saut Si-Alors Si-Alors-Sinon Boucle Tant-Que Répéter jusqu’à Répéter n fois Code ASCII

Si Alors Instruction i … Instruction i VRAI FAUX Si condition alors Instructions j Instructions k VRAI FAUX … Instruction i Si condition alors Instructions j Fin si Instructions k

Si Alors Instruction i FAUX VRAI Condition ? Instructions j Instructions k FAUX VRAI … Inst i Elaboration de condition Bcondition_vraie LV J LF LV : Inst j LF : Ints k … Inst i Elaboration de condition Bcondition_fausse LF Inst j LF : Ints k

Si-Alors-Sinon Instruction i Condition ? Instructions j Instructions k VRAI FAUX Instructions m … Instruction i Si condition alors Instructions j Sinon Instruction m Fin si Instructions k

Si-Alors-Sinon Instruction i Condition ? Instructions j Instructions k VRAI FAUX Instructions m … Inst i Elaboration de condition Bcondition_vraie LV Inst m J Fin LV : Ints j Fin : Inst k

Boucle - Tant que Instruction i FAUX VRAI Condition ? Instructions j Instructions k VRAI FAUX … Inst i Tq : Elaboration de condition Bcondition_faux Fin Inst j J Tq Fin : Inst k … Instruction i Tant que condition alors Instructions j Fin tant que Instructions k

Boucle - Répéter jusqu’à Instruction i Condition ? Instructions j Instructions k VRAI FAUX … Instruction i Faire Instructions j Tant que condition Instructions k … Inst i Do : Inst j Elaboration de condition Bcondition_vrai Do Fin : Inst k

Plan Nécessité de la rupture de séquence Sauts Détermination de l’adresse de saut Réalisation des structures de contrôle des langages de haut niveau à l’aide de saut Code ASCII

Code ASCII Convention internationale sur 7 bits : Extension aux caractères français (ISO_LATIN)

Exemple .data message : .asciiz "bonjour" .stack .text lui $5, message>>16 ori $5, $5, message &0xFFFF boucle : lb $6,($5) beq $6, $0, fin addi $6, $6, -0x20 sb $6,($5) addi $5, $5, 1 j boucle fin : ori $2, $0, 10 syscall