La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "UE MAREP Cours 5 : Structures de contrôle représentées en assembleur"— Transcription de la présentation:

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

2 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

3 Exemple de programme sans rupture de séquence
.data .stack .text __start: PC <= 0x xor $3, $3, $3 0x  : $3 = 0 xor $4, $4, $4 0x  : $4 = 0 addi $3, $3, 1 0x  : $3 = 1 add $4, $4, $3 0x c : $4 = 1 addi $3, $3, 1 0x  : $3 = 2 add $4, $4, $3 0x  : $4 = 3 addi $3, $3, 1 0x  : $3 = 3 add $4, $4, $3 0x c : $4 = 6 ori $2, $0, 10 0x  : $2 = 10 syscall 0x  

4 Exemple de programme avec rupture de séquence
.data .stack .text __start: PC <= 0x xor $3, $3, $3 0x  : $3 = 0 xor $4, $4, $4 0x  : $4 = 0 debut: addi $3, $3, 1 0x  : $3 = 1, 2, 3, … add $4, $4, $3 0x c : $4 = 1, 3, 6, … j debut 0x  : ori $2, $0, 10 0x  : $2 = 10 syscall 0x  :

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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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 (I * 4) ) 000010 Immédiat sur 26 bits 000101 Rx Ry Immédiat sur 16 bits

15 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).

16 Détermination de l’adresse de saut
Première passe .data .stack .text fin: ori $2, $0, 10 0x x a syscall x x c __start: PC <= 0x xor $3, $3, $3 0x x xor $4, $4, $4 0x c 0x ori $5, $0, 3 0x x deb: addi $3, $3, 1 0x x add $4, $4, $3 0x x bne $3, $5,deb 0x c 0x1465XXXX j fin 0x b000010BBBBBBBB…B 26 bits

17 Détermination de l’adresse de saut
Seconde passe .data .stack .text fin: ori $2, $0, 10 0x x a syscall x x c __start: PC <= 0x xor $3, $3, $3 0x x xor $4, $4, $4 0x c 0x ori $5, $0, 3 0x x deb: addi $3, $3, 1 0x x add $4, $4, $3 0x x bne $3, $5,deb 0x c 0x1465FFFD j fin 0x x

18 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

19 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

20 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

21 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

22 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

23 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

24 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

25 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

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

27 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


Télécharger ppt "UE MAREP Cours 5 : Structures de contrôle représentées en assembleur"

Présentations similaires


Annonces Google