The assembler output/fr
│
English (en) │
français (fr) │
Retour au contenu FPC internals
La sortie assembleur
(dernière mise à jour pour fpc version 1.0.x)
Tout le code est généré via une liste chaînée d'instructions spéciale. La base de ceci est un objet spécial, un assembleur abstrait qui implémente toutes les directives qui sont généralement implémentées dans les différents assembleurs disponibles sur le marché. Lorsque le générateur de code et l'analyseur génèrent la sortie finale, elle est générée sous forme de liste chaînée pour chacune des sections disponibles pour l'assembleur de sortie. Chaque entrée de la liste chaînée est soit une instruction, soit l'une des directives abstraites de l'assembleur.
http://www.pjh2.de/fpc/CompilerInternalsFigure11.png
Organisatioin de la génération de l'assembleur
Les différentes sections possibles trouvées dans la sortie sont les suivantes :
Nom de section interne | Description |
---|---|
ExparAsmList | Liste temporaire |
DataSegment | Variables initialisées |
CodeSegment | Instructions et directives de code générales |
DebugList | Informations de débogage |
WithDebugList | ??????????????? |
Consts read | Constantes seulement. |
ImportSection | Symboles importés |
ExportSection | Symboles exportés |
ResourceSection | Données de ressource |
RttiList | Données d'information de type à l'exécution (RTTI) |
ResourceStringList | Données chaînes de ressource |
Les directives suivantes pour l'assembleur abstrait qui existent actuellement.
Type de noeuds de l'assembleur abstrait :
Type de noeud d'entrée | Description |
---|---|
Ait_None | Cette entrée dans la liste chaînée est invalide (cela ne devrait jamais arriver) |
Ait_Direct | Sortie directe vers le fichier assembleur résultant (comme chaîne de caractères) |
Ait_String | Chaîne courte avec une longueur prédéfinie |
Ait_Label | Etiquette assembleur numérotée utilisée pour les sauts |
Ait_Comment | Commentaire de sortie assembleur |
Ait_Instruction | Instruction spécifique de processeur |
Ait_DataBlock | Bloc de données non initialisées (BSS) |
Ait_Symbol | L'entrée représente un symbole (exporté, importé ou un autre type de symbole public).
Types possibles: NONE, EXTERNAL, LOCAL et GLOBAL p.ex. : Un symbole suivi par un Ait_const_32bit |
Ait_Symbol_End | Symbole fin (par exemple la fin d'une routine) |
Ait_Const_32bit | Constante 32-bit initialisée(sans un symbole) |
Ait_Const_16bit | Constante 16-bit initialisée (sans un symbole) |
Ait_Const_8bit | Constante 8-bit initialisée (sans un symbole) |
Ait_Const_symbol | ???????????? |
Ait_Real_80bit | (x86) Constante en virgule flottante 80-bit initialisée (sans symbole). Note type REAL obsolète. |
Ait_Real_64bit | Constante en virgule flottante en double précision IEEE initialisée (sans symbole) |
Ait_Real_32bit | Constante en virgule flottante en simple précision IEEE initialisée (sans symbole) |
Ait_Comp_64bit | (x86) Entier 64-bit en virgule flottante (comp) initialisé (sans symbole) |
Ait_Align Alignment | Directive |
Ait_Section Section | Directive |
Ait_const_rva | (Win32) |
Ait_Stabn | Information de débogage stabs (valeur numérique) |
Ait_Stabs | Information de débogage stabs (chaîne de caractères) |
Ait_Force_Line stabs | Ligne d'information de débogage |
Ait_Stab_Function_Name | Nom de routine des informations de débogage stabs |
Ait_Cut | Coupure dans les fichiers assembleur (utilisé pour la liaison intelligente) |
Ait_RegAlloc | Information de débogage pour l'allocateur de registre |
Ait_Marker | ???????????? |
Ait_Frame | (Alpha) |
Ait_Ent | (Alpha) |
Ait_Labeled_Instruction | (m68k) |
Ait_Dummy | Inutilisé - Ne devrait jamais apparaître |