IUT FV Bandjoun // Département d’Informatique (IG1 2007/2008) LANGAGES DE PROGRAMMATION « Options clés de l’EDI « Turbo C », ASM - LANGAGE C » Environnement de Développement Intégré « Turbo C » de Borland/Inprise LES OPTIONS D’OPTIMISATION DU CODE Elles se trouvent dans le menu "Option" de l‘éditeur du Turbo C 1 – "Options" -> "Application" Cette boîte permet de défnir les options permettant de générer soit un fchier exécutable Windows standard, soit une librairie DLL Windows, soit une application Dos standard ou encore une application Dos avec partiels [overlays : chargement en mémoire de façon modulaire et dynamique]. 2 – "Options" -> "Compiler" Cette commande affche un menu de commandes débouchant sur des boîtes de dialogue : Celles-ci vous permettent de sélectionner les options affectant la compilation. Code Generation... Advanced Code Generation... Entry/Exit Code... C++ Options... Optimizations... Source... Messages Names... 2-1- Options->Compiler->Code Generation... Affche la boîte Code Generation. Cette boîte sert à défnir les modalités de la compilation. 2-2- Options->Compiler->Advanced Code Generation... Cette commande provoque l'ouverture de la boîte Advanced Code Generation qui sert à défnir d'autres options de compilation. 2-3- Options->Compiler->Entry/Exit Code... Cette commande provoque l'ouverture de la boîte Entry/Exit Code Generation qui sert à défnir la teneur du code généré en entrée et en sortie des appels de fonctions. Si vous avez défni des options dans la boîte Set Application Options, certains des choix de la boîte Code Entrées/sorties seront déjà corrects. 2-4- Options->Compiler->C++ Options... Cette commande provoque l'ouverture de la boîte de dialogue C++ Options. Ces options indiquent au compilateur comment préparer le code .OBJ à partir du langage C++. 2-5- Options->Compiler->Optimizations... Cette commande provoque l'apparition de la boîte Optimization Options qui fournit des défnitions indiquant au compilateur comment préparer le code .OBJ en fonction de la taille ou de la vitesse d'exécution. 2-6- Options->Compiler->Source... Cette commande provoque l'ouverture de la boîte Source Options qui permet de défnir des options concernant l'analyse du texte source et les types qu'il contient. 2-7- Options->Compiler->Messages Cette commande amène un sous-menu. Toutes les commandes provoquent l'ouverture d'une boîte de dialogue affectant la génération des messages d'erreurs. La liste des messages d'erreurs classiques que vous rencontrerez durant l‘écriture de vos programmes est forunie dans chaque cas. 2-7-1- Options->Compiler->Messages->Display Provoque l'ouverture de la boîte Compiler Messages qui permet de choisir les messages à affcher. 2-7-2- Options->Compiler->Messages->Portability... Provoque l'ouverture de la boîte Portability Warnings ce qui permet de choisir les mises en garde concernant la portabilité à affcher. Ces mises en garde vous préviennent de problèmes lors du portage du code vers un autre compilateur. Cela ne s'applique en général qu'aux extensions de Turbo C++. 2-7-3- Options->Compiler->Messages->ANSI Violations... Ce bouton provoque l'apparition de la boîte ANSI Violations qui permet de choisir les mises en garde concernant les violation relative à la norme ANSI du C. Ces mises en garde préviennent d'un code acceptable pour Turbo C++ (à cause du C++ ou des extensions) mais qui n'est pas dans la défnition ANSI du C. 2-7-4- Options->Compiler->Messages->C++ Warnings... Provoque l'ouverture de la boîte C++ Warnings qui permet de choisir les mises en garde concernant le C++. Ces mises en garde préviennent d'erreurs réalisées dans le code C++. Elles peuvent être dues à des éléments obsolètes ou à une syntaxe incorrecte. 2-7-5- Options->Compiler->Messages->Frequent Errors... Dr. NKENLIFACK Marcellin Page 1 / 5 IUT FV Bandjoun // Département d’Informatique (IG1 2007/2008) LANGAGES DE PROGRAMMATION « Options clés de l’EDI « Turbo C », ASM - LANGAGE C » Ce bouton provoque l'ouverture de la boîte Frequent Errors qui permet de choisir l'affchage des erreurs les plus fréquentes. Ces erreurs concernent les erreurs de programmation les plus rencontrées. En particulier les conditions qui n'entrent pas en violation avec le langage Turbo C++ mais qui peuvent donner un mauvais résultat. 2-7-6- Options->Compiler->Messages->Less Frequent Error Ce bouton provoque l'ouverture de la boîte Less Frequent Errors qui permet de choisir l'affchage de messages d'erreurs moins fréquents. Ces erreurs concernent des erreurs de programmation. Elles concernent les conditions qui n'entrent pas en violation avec le langage Turbo C++ mais qui peuvent donner un mauvais résultat. 2-8- Options->Compiler->Names... Provoque l'ouverture de la boîte Segment Names qui permet de changer les noms de segments, de groupes et de classes pour le code, les données et la section BSS (Segment de Base ). 3 – "Options" -> "Transfer" Cette commande provoque l'affchage de la boîte Transfer qui permet d'ajouter ou d'ôter des programmes du menu Système -. Vous choisissez vos éléments dans ce menu Système pour lancer l'exécution d'un autre programme sans sortir réellement de Turbo C++. (Ces programmes sont appelés des programmes transfert.) Pour revenir à Turbo C++ d'un programme transfert, vous devez d'abord sortir du programme. 4 – "Options" -> "Make..." Cette commande provoque l'ouverture de la boîte de dialogue Make qui permet de défnir les conditions de production d'un exécutable. 5 – "Options" -> "Linker..." Cette commande provoque l'ouverture d'un sous-menu. Chacune de ces commandes amène à une boîte de dialogue permettent de faire des choix concernant la liaison (édition de liens ou « Linkage »). 5-1- Options->Linker->Settings... Cette commande provoque l'ouverture de la boîte de dialogue Linker qui permet de défnir les options de fonctionnement du « Lieur » (éditeur de lien). 5-2- Options->Linker->Libraries... Cette commande provoque l'ouverture de la boîte de dialogue Libraries qui permet de défnir les librairies a lier à l'application. 6 – "Options" -> "Librarian..." Cette commande provoque l'ouverture de la boîte de dialogue Librarian Options qui défnit les options du libraire intégré. Ce libraire permet de combiner des fchiers .OBJ dans un fchier .LIB 7 – "Options" -> "Debugger..." Cette commande provoque l'ouverture de la boîte de dialogue Debugger qui défnit les options de fonctionnement du débogeur intégré. 8 – "Options" -> "Directories..." Cette commande provoque l'ouverture de la boîte Directories qui spécife les répertoires utilisés par Turbo C++. 9 – "Options" -> "Environment" Cette commande provoque l'ouverture d'un sous-menu permettant de personnaliser l'EDI (Environnement de Développement Intégré) de Turbo C++. Preferences... Editor... Mouse... Desktop... Startup... Colors... Chaque commande provoque l'ouverture d'une boîte de dialogue. 9-1- Options->Environment->Preferences... Cette commande provoque l'ouverture de la boîte Preferences qui permet de choisir le mode d'utilisation de l'environnement EDI de Turbo C++. 9-2- Options->Environment->Editor... Cette commande provoque l'ouverture de la boîte de dialogue Editor Options qui permet de choisir comment utiliser l'éditeur de l'EDI. 9-3- Options->Environment->Mouse... Cette commande provoque l'ouverture de la boîte Mouse Options qui défnit l'utilisation de la souris: - vitesse d'un double-clic - choix du bouton actif (droite ou gauche) - fonction associée au bouton non actif de la souris. 9-4- Options->Environment->Desktop... Cette commande provoque l'ouverture de la boîte Desktop Preferences qui permet de spécifer quels éléments du bureau sont sauvegardés d'une session à l'autre. 9-5- Options->Environment->Startup... Cette commande provoque l'ouverture de la boîte de dialogue Startup Options qui permet de défnir différentes options de démarrage de l'environnement de Turbo C++. Dr. NKENLIFACK Marcellin Page 2 / 5 IUT FV Bandjoun // Département d’Informatique (IG1 2007/2008) LANGAGES DE PROGRAMMATION « Options clés de l’EDI « Turbo C », ASM - LANGAGE C » 9-6- Options->Environment->Colors... Cette commande provoque l'ouverture de la boîte de dialogue Colors qui permet de défnir les couleurs de l'EDI. 10 – "Options" -> "Save..." Cette commande provoque l'ouverture à partir de la boîte Save Options qui permet de sauvegarder: ■ la confguration des boîtes (Search->Find et Search->Replace) ainsi que ■ la confguration dans les différents menus boîtes de Options. Ces éléments sont sauvegardés dans trois fchiers différents:un pour l'environnement, un pour le bureau et un pour le projet. Au démarrage de Turbo C++, le compilateur recherche le répertoire courant pour trouver le fchier des options. S'il ne l'y trouve pas, il recherche dans le répertoire de l'exécutable Turbo C++. QUELQUES APPLICATIONS… Les programmes qui créent des objets dynamiques (tels que les listes) sont parfois susceptibles d‘entraîner des débordements de mémoire. Cela nécessite une bon paramétrage des options de compilation, de l‘allocation mémoire (segments, piles, tas…), de l'édition de liens et de la génération de code. 1- Cas des appels systèmes et exécution des commandes DOS Les appels externes exécutant certaines commandes du système DOS ou de toute autre application à partir de votre programme nécessitent un certain nombre de précautions. Options│Compiler│Advanced Code Generation... Floating Point (options) Ces boutons permettent de spécifer la façon dont Turbo C++ traite les nombres de l'Arithmétique fottante (CoProcesseur Arithmétique / Mathématique). { Equivalent Appel ligne de commande TCC: -f287 } Choisissez l‘option 80287 pour générer du code spécifque au 80287 ou supérieur. Génération des instructions 80286 {Equivalent Appel ligne TCC: -2 } pour la Génération des instructions 80286. Options│Debugger... Program Heap Size Cette boîte de saisie permet de spécifer la quantité de mémoire que Turbo C++ doit attribuer au programme en cours de débogage. Sa valeur implicite est 64 Ko Augmentez la valeur à 128 Ko éventuellement. Exemples de mise en pratique de certaines options présentées : #include <conio.h> #include <float.h> #include <stdlib.h> void main() { char * str; int i=0; char *buffer; int r; textmode(C4350);textbackground(YELLOW); textcolor(BLUE); clrscr(); gotoxy(2,2);cprintf("... Taper sur une touche pour lister...\n"); gotoxy(2,3);cprintf("les variables d'environnement disponibles"); getch(); //..Listage des variables d'environnement.. window(1,5,80,45);textbackground(GREEN);clrscr(); while(environ[i]) { gotoxy(2,2+i);textcolor(WHITE);cprintf("VarEnv%d:",i); textcolor(RED);cprintf("%s\n",environ[i++]); delay(100); } gotoxy(2,4+i);textcolor(BLACK);cprintf("Taper sur Entree..."); getch(); //..Appel d'une procedure systeme..textmode(C80);textbackground(DARKGRAY);textcolor(CYAN);clrscr(); _fpreset(); if ( (r = system("dir/p") ) == -1) { printf("\nErreur: retour = %d\n",r); printf("\nTaper sur une touche pour continuer ..."); buffer = strerror(errno); printf("\nError: %s\n", buffer); } if ( (r = system("md temp1") ) == -1) { printf("\nErreur: retour = %d\n",r); printf("\nTaper sur une touche pour continuer ..."); buffer = strerror(errno); printf("\nError: %s\n", buffer); } getch(); textmode(C80);textbackground(BLACK);textcolor(LIGHTGRAY); } Dr. NKENLIFACK Marcellin Page 3 / 5 IUT FV Bandjoun // Département d’Informatique (IG1 2007/2008) LANGAGES DE PROGRAMMATION « Options clés de l’EDI « Turbo C », ASM - LANGAGE C » 2- Modèles de mémoire Important lorsqu’on a à faire aux projets (développements). Options│Compiler│Code Generation... Différentes options déterminent le modèle mémoire employé. Il défnit la méthode d'adressage mémoire implicite. A l'origine le modèle mémoire est Small (par défaut). - Tiny : Le modèle TINY est à préférer lorsque l'encombrement mémoire doit être le plus réduit possible. Les 4 registres de segment (CS, DS, ES, SS) pointent sur la même adresse; vous disposez donc de 64Ko au total pour le code, les données et la pile. Les pointeurs sont tous courts (NEAR). Un programme TINY peut être converti au format .COM en liant avec l'option TLINK /t. - Small : Pour les applications de taille moyenne, utilisez le modèle Small. Les segment de code et de données sont distincts, ils ne se recoupent pas; vous pouvez donc disposer de 64Ko pour le code et de 64Ko pour les données et la pile. Les pointeurs courts sont toujours utilisés. - Medium : Le modèle Medium est le mieux adapté aux grandes applications n'employant que peu de données en mémoire. Les pointeurs longs sont utilisés pour le code mais pas pour les données. Par conséquent, les données et la pile doivent se contenter de 64Ko alors que le code peut occuper jusqu'à 1Mo. - Compact : Si votre code est petit mais qu'il doit accéder à un grand volume de données, utilisez le modèle Compact. Ce modèle peut être appréhendé comme le complément du modèle Medium: pointeurs longs pour les données mais pas pour le code. Le code est limité à 64Ko mais les données peuvent s'étendre sur 1Mo. Les fonctions sont donc à accès « near » en standard et les données à accès « far ». - Large : Le modèle Large est réservé aux très grosses applications. Les pointeurs longs sont mis en oeuvre pour le code et les données (1Mo adressable dans les deux cas). En standard, les fonctions et pointeurs de données sont longs. - Huge : Ce modèle est une extension du modèle Large. Turbo C++ limite généralement les données à 64Ko ; le modèle huge brise cette limite en autorisant plusieurs segments de données (de 64Ko), jusqu'à 1 Mo de code et toujours 64Ko pour la pile. En standard, les fonctions et pointeurs de données sont longs. 3- Mode de code "exécutable" généré Options│Linker│Settings... Output (options) Ces options spécifent le type d'application à générer par le « Linkeur ». - Standard EXE : Produit un exécutable fonctionnant sous DOS. { Equivalent TLINK: /td } - Overlaid EXE : Produit un exécutable en mesure de gérer les partiels (overlays). { Equivalent TLINK: /o } [overlays : le chargement en mémoire est dynamique et modulaire, (à la “demande”)] 4- Type de code: nomalisation et portabilité Options│Compiler│Source... Keywords (options) : Ces options indiquent au compilateur comment reconnaître les mots réservés. - Turbo C++ { Equivalent TCC: -A ou –AT } Indique au compilateur de reconnaître ces mots réservés en extension au langage: asm cdecl export far huge include interrupt near pascal _es, _ds, _cs, _ss ainsi que les pseudovariables de registre (_AX, _BX, etc.) La liste complète des mots réservés se trouve à l‘index des mots réservés du Turbo C++ asm case class _cs do else extern _fastcall friend if interrupt near auto cdecl const default double enum _export foat goto inline _loadds new break char continue delete _ds _es far for huge int long operator - ANSI {Equivalent TCC:-A } Indique au compilateur de ne reconnaître que les mots réservés ANSI et de considérer les mots réservés en extension de Turbo C++ comme des identifcateurs réguliers. - UNIX V { Equivalent TCC: -AU } Cette option indique au compilateur de ne reconnaître que les mots réservés de UNIX système V et de considérer les mots réservés en extension de Turbo C++ comme des identifcateurs réguliers. - Kernighan and Ritchie { Equivalent TCC: -AK } Cette option indique de ne reconnaître que les mots réservés défnis par K&R et de considérer les mots réservés en extension de Turbo C++ comme des identifcateurs réguliers. Dr. NKENLIFACK Marcellin Page 4 / 5 IUT FV Bandjoun // Département d’Informatique (IG1 2007/2008) LANGAGES DE PROGRAMMATION « Options clés de l’EDI « Turbo C », ASM - LANGAGE C » INTEGRATION DE L'ASSEMBLEUR DANS UN PROGRAMME TURBO C++ asm (mot réservé) L'instruction asm permet de placer directement des instructions en langage assembleur dans le code source C++. Syntaxe : asm <opcode> <operands> <; or newli Tous les symboles C++ sont remplacés par leur équivalent approprié en langage assembleur. Pour incorporer plusieurs instructions asm consécutives, délimitez-les par des accolades: asm { } pop ax; pop ds iret Exemple asm mov ax,_stklen L'Assembleur Inline (BASM) Nous abrégeons l'assembleur intégré en BASM (Borland ASseMbler). Avec l'assembleur intégré (inline) de Turbo C++, vous pouvez insérer du code 8086/8087 et 80286/80287 directement dans vos textes sources C et C++. Utilisation de l'assembleur intégré Vous débutez une partie en assembleur intégré par la directive asm. Vous enchaînez ensuite des instructions assembleur. Expressions Les opérandes de BASM sont des expressions. Elles sont constituées de constantes, de noms de registres, de symboles et d'opérateurs. BASM comporte trois catégories d'expressions: - registres - références mémoire - valeurs immédiates Symboles BASM permet de référencer, dans ses expressions, pratiquement tous les symboles créés au niveau du langage C++ y compris les labels, constantes, types, variables et fonctions. En complément aux types C++ standard et déclarés, BASM propose plusieurs symboles de types prédéfnis. Constantes BASM supporte deux genres de constantes: - numériques - chaînes Opcodes, Opérateurs et Directives BASM accepte: - Toutes les instructions 8086/8087 et 80286 - Les Codes Opératoires (OpCodes) - Une grande partie des opérateurs d'expression de Turbo Assembler (TASM) - Les directives de réservation d'espace octet, mot et double mot de TASM (DB, DW et DD) BASM autorise de nombreux éléments de syntaxe inspirés de Turbo Assembler (TASM) et de Microsoft Macro Assembler (MASM). Points de renvoi des fonctions BASM Les fonctions qui utilisent la directive d'assembleur inline asm doivent renvoyer le résultat de la manière suivante: Type du résultat Ordinal Renvoyé dans AL (sur 8 bits) AX (sur 16 bits) DX:AX (sur 32 bits) ST(0) sur la pile de registres du 80x DX:AX. 8087 pointeur Mots réservés de BASM Dans les opérandes, les mots réservés ci-dessous possèdent une signifcation fxe pour l'assembleur BASM: AH BL CL AL BP CS AND BX CX AX BYTE DH DL FAR NOT SHL ST DS HIGH OFFSET SHR TYPE DWORD DX LOW MOD OR PTR SI SP WORD XOR BH CH DI ES NEAR SEG SS Ces mots réservés ont toujours priorité par rapport aux identifcateurs homonymes défnis par le programmeur. Dr. NKENLIFACK Marcellin Page 5 / 5