Environnement de Développement Intégré « Turbo C

publicité
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
Téléchargement