Semaine 02 • Retour sur la semaine 01 • Les outils de développement logiciel • Les outils que nous utiliserons durant la première partie Automne 2002 Martin Dubois Programmation système IFT-17584 Retour sur la semaine 01 • • • • • Plan de cours Raisons de l’apprentissage de l’assembleur Architecture des processeurs modernes Architecture CISC vs RISC Architecture du Pentium 4 Automne 2002 Martin Dubois Programmation système IFT-17584 L’assembleur • Entrées – Fichiers sources en langage assembleur – Fichiers de définition • Sortie – Fichier objets • Responsable de transformer le langage assembleur en langage machine (binaire) Automne 2002 Martin Dubois Programmation système IFT-17584 L’éditeur de liens • Entrés – Fichiers objets – Librairies (assemblage de fichiers objets) • Sortie – Exécutable • Responsable de trouver les dépendances entre modules objets et de créer les liens. Automne 2002 Martin Dubois Programmation système IFT-17584 Les outils de développement logiciel Automne 2002 Martin Dubois Programmation système IFT-17584 Notre monde • Pentium 4 • Première partie – Windows 2000 – Visual C++ – MASM • Seconde partie – Linux – Outils GNU (GCC et GAS) Automne 2002 Martin Dubois Programmation système IFT-17584 Visual C++ • • • • • Éditeur Environnement de développement intégré Compilateur C (CL.EXE) Éditeur de liens (LINK.EXE) Dévermineur Automne 2002 Martin Dubois Programmation système IFT-17584 Les “Listing Files” • Configuration du compilateur pour la génération • Utilités de ces fichiers – – – – – Apprentissage de l’assembleur Déverminage de l’assembleur « inline » Base d’optimisation Génération des squelette de fonctions Utilités historiques Automne 2002 Martin Dubois Programmation système IFT-17584 L’assembleur “Inline” • Avantages – Simplicité – Partage simple des variables du programme C – Aucune préoccupation à propos de l’organisation de la mémoire – Aucune préoccupation à propos du passage des arguments – Aucune préoccupation de l’initialisation des librairies systèmes Automne 2002 Martin Dubois Programmation système IFT-17584 Les désavantages • Aucun contrôle sur l’organisation de la mémoire • Aucun contrôle sur les méthodes utilisées pour accéder aux variables Automne 2002 Martin Dubois Programmation système IFT-17584 Utilités Pédagogiques • Test rapide d’une ou de quelques instructions Autres • Réaliser un traitement court faisant appel à des instructions spécialisés du processeurs Automne 2002 Martin Dubois Programmation système IFT-17584 MASM32 • Version décomercialisé de l’assembleur natif de MicroSoft • Un éditeur conviviale à été ajouté : QEditor • Site officiel : www.masm32.com • Très puissant – offre plus qu’un assembleur conventionnel Automne 2002 Martin Dubois Programmation système IFT-17584 Installation de MASM32 • Téléchargez le fichier compresser directement du site du cours (\Outils\masmET.zip) • Décompressez le de manière à ce que le répertoire masm32 soit à la racine du disque qui contiendra aussi vos programmes assembleur C’est terminé ! Automne 2002 Martin Dubois Programmation système IFT-17584 Exemple 01 .686 .model flat, stdcall option casemap:none include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .code start: push 0 call ExitProcess end start Automne 2002 Martin Dubois Programmation système IFT-17584 Utilisation MASM32 • • • • Assemblage Édition des liens Exécution Déverminage en utilisant Visual C++ Automne 2002 Martin Dubois Programmation système IFT-17584 .686 • • • • • Directive d’assemblage Obligatoire Définit le type de processeur Autres possibilités : .386 .486 .586 En ajoutant un P à la fin nous gagnons le droit d’utiliser les instructions privilégiés. Automne 2002 Martin Dubois Programmation système IFT-17584 .model flat, stdcall • Directive d’assemblage • Obligatoire • Indique que nous utiliserons un seul segment de 4 GB • Indique aussi que la convention d’appel des fonction sera celle du langage C standard Automne 2002 Martin Dubois Programmation système IFT-17584 option casemap:none • Directive d’assemblage • Indique que la différence entre majuscule et minuscule est importante • Autres choix: all, notpublic • Nécessaire pour l’interaction avec les langages tel que le C Automne 2002 Martin Dubois Programmation système IFT-17584 include \masm32\include\kernel32.inc • include est la directive d’assemblage permettant d’inclure un autre fichier source. • \masm32\include\kernel32.inc et le nom du fichier déclarant les fonctions de la librairie “Kernel32” • Cette directive ressemble en tous points à la directive #include des langages C et C++ Automne 2002 Martin Dubois Programmation système IFT-17584 includelib \masm32\lib\kernel32.lib • includelib est la directive d’assemblage qui indique qu’une librairie devra être lié avec le fichier assembleur • \masm32\lib\kernel32.lib est le nom de la librairie • Cette information n’est pas directement utilisé par l’assembleur. Elle est simplement transmise à l’éditeur de liens. Automne 2002 Martin Dubois Programmation système IFT-17584 .code • Directive de compilation • Les instructions qui suivent doivent être placés dans la section réservée aux instructions exécutables • Cette section peut toujours être lu et exécuté • Plusieurs systèmes d’exploitation ne permette pas l’écriture dans cette section. Automne 2002 Martin Dubois Programmation système IFT-17584 Start: • Symbole • Ce symbole est reconnu par l’éditeur de liens comme étant le point d’entrée du programme • Il remplace le main des langages C / C++ Automne 2002 Martin Dubois Programmation système IFT-17584 push 0 • Instruction • Placer la valeur 0 au sommet de la pile Automne 2002 Martin Dubois Programmation système IFT-17584 call ExitProcess • Instruction • Transférer le contrôle à la fonction ExitProcess • Habituellement l’exécution se continue à l’instruction suivante quand la fonction appelée rend le contrôle • La fonction ExitProcess à cependant la particularité de ne pas rendre le contrôle Automne 2002 Martin Dubois Programmation système IFT-17584 end start • Directive d’assemblage • Indique la fin d’un fichier source • Le symbole, si présent indique ou l’exécution du programme doit débuter Automne 2002 Martin Dubois Programmation système IFT-17584 Ce qui nous manque encore • Commentaires • Définition de variables globales • Définition de constantes Automne 2002 Martin Dubois Programmation système IFT-17584 Les commentaires • Tout ce qui suit un ; sur un ligne est considéré comme un commentaire ; ; ; ; Exemple02.asm //////////////////////////////////////////////////////////////////////////// IFT-17584 : Programmation systeme Martin Dubois - Automne 2002 ; Option de compilation ; //////////////////////////////////////////////////////////////////////////// .686 .model flat, stdcall option casemap:none Automne 2002 Martin Dubois ; Type de processeur = P4 ; Un seul segment de 4 GB ; Tenir compte des majuscule-minuscule Programmation système IFT-17584 Les commentaires (la suite) ; Includes ; //////////////////////////////////////////////////////////////////////////// include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib ; Debut du segment de code ; //////////////////////////////////////////////////////////////////////////// .code ; ===== Start ================================================================ ; Le point d'entree du programme start: push 0 ; Nous desirons que le code retourne par le programme soit 0 call ExitProcess end start Automne 2002 Martin Dubois Programmation système IFT-17584 Les variables globales .data db db dw dw dd dd ; Variable initialises 0 ; un octets initialise à 0 “Toto”, 0 ; une chaine de caractere termine 100 ; un mot initialise à 0 1, 2, 3 ; un tableau de 3 mots initialises 456789abh ; un double mot initialise à 0x456789ab 10 dup(0) ; un tableau de 10 double mots tous ; initialise à 0 .data? ; Variables non initialisees db ? ; un octets non initialise dw 10 dup(?) ; un tableau de 10 mots non initialise Automne 2002 Martin Dubois Programmation système IFT-17584 Les constantes .const DIX equ 10 Ressemble aux #define du langage C ZERO db CENT dw 0 100 Ressemble aux variables déclarés en utilisant le mot const Automne 2002 Martin Dubois Programmation système IFT-17584 D’autres directives • align n – Force un symbole à être aligné sur une adresse multiple d’une puissance de 2 donnée • extern symbol – Indique qu’un symbole est définit dans un autre module et utilisé dans celui-ci • public symbol – Indique qu’un symbole définit dans ce module est aussi utilisé par un ou plusieurs autre modules Automne 2002 Martin Dubois Programmation système IFT-17584 Et encore… • high expression • highword expression • low expression • lowword expression Automne 2002 Martin Dubois Programmation système IFT-17584 Un programme tout en assembleur • Avantages – Parfait contrôle sur tout – Espace utilisé et vitesse d’exécution optimale • Désavantages – Responsable de tout (initialisation, terminaison, gestion de la mémoire) – Utilisation des librairies standards plus complexe Automne 2002 Martin Dubois Programmation système IFT-17584 Le meilleur des deux mondes • Ce qui serait bien c’est – écrire l’ensemble du programme en langage de haut niveau – écrire les routines ou modules critiques en assembleur • Bonne nouvelle, c’est possible ! Automne 2002 Martin Dubois Programmation système IFT-17584 Exemple 04 • Programme principal généré par l’assistant de Visual C++ • Module Fonction.asm Automne 2002 Martin Dubois Programmation système IFT-17584 Fonction.asm • Remarquez – – – – plus de directive includelib plus de symbole dans la directive end la nouvelle directive public Fonction le remplacement de l’appel de ExitProcess par l’instruction ret – Kernel32.inc n’est plus inclue Automne 2002 Martin Dubois Programmation système IFT-17584 Exemple04Dlg.cpp • Déclaration de la fonction assembleur – Laissons croire au compilateur C++ que la fonction à été écrite en langage C extern “C” { void Function( void ) } • Appel de la fonction assembleur – Difficile de faire plus simple Function() Automne 2002 Martin Dubois Programmation système IFT-17584 Et le partage des données alors ? • Il est facile de partager des variables globales • C’est ce qui est fait dans l’exemple 05 • Nous apprendrons, plus tard dans ce cours, comment passer des arguments lors d’un appel assembleur – C ou C – assembleur. Automne 2002 Martin Dubois Programmation système IFT-17584 Variable C utilisé en assembleur • Déclaration extern “C” { char gDlg_Message[ 64 ]; } • Utilisation extern gDlg_Message: Automne 2002 Martin Dubois Programmation système IFT-17584 Variable assembleur utilisé en C • Déclaration .data? public gFct_Titre gFct_Titre db 32 dub(?) • Utilisation extern “C” { extern char gFct_Titre[ 32 ]; } Automne 2002 Martin Dubois Programmation système IFT-17584 Petits trucs • Simplifiez vous la tâche, n’utilisez qu’une seule des deux méthodes dans un même programme • Personnellement je préfère déclarer mes variables du cote « C / C++ » Automne 2002 Martin Dubois Programmation système IFT-17584