The assembler output/fr

From Lazarus wiki
Jump to navigationJump to search

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