1 / 23

Le préprocesseur

Le préprocesseur. Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. Contenu du cours. Définition Les blocs de répétition Les tests Les macro-commandes Conclusion. Le préprocesseur. Jeu de commandes de l’assembleur

nizana
Télécharger la présentation

Le préprocesseur

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. Le préprocesseur 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 • Définition • Les blocs de répétition • Les tests • Les macro-commandes • Conclusion Département Informatique

  3. Le préprocesseur • Jeu de commandes de l’assembleur • Simplifient le code à écrire • Génèrent du code assembleur • Avant l’assemblage réel • Utilisent des directives de compilation • .rept,.irp, .irpc, .endr • .macro,.endm • .if, .else, .endif • .set Département Informatique

  4. Contenu du cours • Définition • Les blocs de répétition • Les tests • Les macro-commandes • Conclusion Département Informatique

  5. Blocs de répétition • Duplique n fois les lignes du bloc • Avec des variations mineures • Remplacement de valeurs • Commandes : • .rept<n> : bloc de répétition (n fois) • .endr : fin de bloc • .irp, .irpc : itération sur liste • .set : définition de valeur • = : modification de valeur Département Informatique

  6. Le programme : Tab : .rept 5 .long 0 .endr Équivaut à : Tab : .long 0 .long 0 .long 0 .long 0 .long 0 Répétition simple : .rept Département Informatique

  7. Le programme : Tab : .irp v,ab,cd,ef .ascii "\v" .endr Équivaut à : Tab : .ascii "ab" .ascii "cd" .ascii "ef" Itération sur liste : .irp Département Informatique

  8. Le programme : Tab : .irpc v,abcdef .byte ‘\v,0 .endr Équivaut à : Tab : .byte ‘a,0 .byte ‘b,0 .byte ‘c,0 .byte ‘d,0 .byte ‘e,0 .byte ‘f,0 Itération sur chaîne : .irpc Département Informatique

  9. Le programme : tmp : .set v,0 .irp re,ax,bx,\ cx,dx,bp,sp movw $v,%\re v = v+1 .endr Équivaut à : tmp : movw $0,%ax movw $1,%bx movw $2,%cx movw $3,%dx movw $4,%bx movw $5,%sx Utilisation de valeurs : .set / = Département Informatique

  10. Contenu du cours • Définition • Les blocs de répétition • Les tests • Les macro-commandes • Conclusion Département Informatique

  11. Portion de code conditionnelles • Possibilité d’activer / désactiver desportions de code assembleur • Commandes • .if <expression> : teste si expression ≠ 0 si oui, inclus le bloc suivant • .else : début du bloc sinon (expression = 0) • .endif : fin du bloc • Ou encore • .ifdef <symbol> : teste si symbol existe • .ifndef <symbol> : teste si symbol n’existe pas Département Informatique

  12. LC0 : .string \ "starting main" _start : .if debug pushl LC0 call printf addl $4,%esp .endif pushl %ebp movl %esp, %ebp … Utilisation de conditionnelles (1) Département Informatique

  13. Compilé avec as –-defsym debug=1 : LC0 : .string \ "starting main" _start : pushl LC0 call printf addl $4,%esp pushl %ebp movl %esp, %ebp … Utilisation de conditionnelles (2) Département Informatique

  14. Compilé avec as -–defsym debug=0 : LC0 : .string \ "starting main" _start : pushl %ebp movl %esp, %ebp … Utilisation de conditionnelles (2) Département Informatique

  15. Contenu du cours • Définition • Les blocs de répétition • Les tests • Les macro-commandes • Conclusion Département Informatique

  16. Définition Une macro-commande est • Une nouvelle commande • Composée de plusieurs commandes • Ressemble à une fonction • Mais insérée à chaque utilisation • Peut être redéfinie Département Informatique

  17. .macro debut pushl %ebp movl %esp, %ebp .endm .macro fin leave ret .endm .macro affiche chaine pushl $\chaine call printf addl $4, %esp .endm .data C1: .string "ABCD" C2: .string "EFGH" .text .global main main: debut affiche C1 affiche C2 fin Exemple (1) Département Informatique

  18. .data C1: .string "ABCD" C2: .string "EFGH" .text .global main main: pushl %ebp movl %esp, %ebp pushl $C1 call printf addl $4, %esp pushl $C2 call printf addl $4, %esp leave ret Exemple (2) Département Informatique

  19. .macro test exprcmpl $0, \exprjnevraifaux: …jmpsuitevrai: …suite:.endm main: test %eax test %ebx test %ecx main: cmpl $0, %eaxjnevraifaux: …jmp suitevrai: …suite: cmpl $0, %ebxjnevraifaux: …jmpsuitevrai: …suite: cmpl $0, %ecxjnevraifaux: …jmpsuitevrai: …suite: Le problème des labels Département Informatique

  20. Solution… Pour résoudre ce problème : • Utilisation de labels locaux • Syntaxe : • 0:, 1:, 2:, 3:, 4:, 5:, 6:, 7:, 8:, 9: • jmp 2b : Saute au dernier label «2» défini • jmp 4f : Saute au prochain label «4» défini • Problèmes : • Source pas très lisible… • Facile de se tromper… • Pas très explicite Département Informatique

  21. Contenu du cours • Définition • Les blocs de répétition • Les tests • Les macro-commandes • Conclusion Département Informatique

  22. Conclusion Un programme avec macro-commandes est : • Plus simple • Plus court • Plus rapide (pas de call ni de ret) En contrepartie, le code généré sera : • Plus long car redondant(Duplication du code des macros) Département Informatique

  23. Conclusion (2) • Il est possible de définir un langage presque complet avec des macros. • Instructions de haut niveau • Pas d’instructions complexes (boucles…) sans utiliser des mécanismes lourds (multiples mots-clés pour une même commande) • Ce n’est pas l’objectif de ce cours. Département Informatique

More Related