Assemblage de haut niveau - High Level Assembly

Assemblage de haut niveau (HLA)
Développeur(s) Randall Hyde
Version stable
2.16 / 6 juillet 2011 ; il y a 9 ans ( 2011-07-06 )
Dépôt sourceforge .net /projets /hlav1
Écrit en Langage d'assemblage
Système opérateur Windows , Linux , FreeBSD , macOS
Plate-forme IA-32
Disponible en Anglais
Taper Assembleur
Licence Domaine public
Site Internet plantation-productions .com /Webster

High Level Assembly ( HLA ) est un langage d'assemblage de haut niveau développé par Randall Hyde . Il permet l'utilisation de constructions de langage de niveau supérieur pour aider les développeurs d'assemblage débutants et avancés. Il prend entièrement en charge les types de données avancés et la programmation orientée objet . Il utilise une syntaxe vaguement basée sur plusieurs langages de programmation de haut niveau (HLL), tels que Pascal , Ada , Modula-2 et C++ , pour permettre la création de programmes en langage assembleur lisibles et pour permettre aux programmeurs HLL d'apprendre HLA aussi vite que possible .

Origines et objectifs

HLA a été conçu à l'origine comme un outil pour enseigner la programmation en langage assembleur au niveau collégial-universitaire. L'objectif est d'exploiter les connaissances de programmation existantes des étudiants lors de l'apprentissage du langage assembleur pour les mettre à niveau le plus rapidement possible. La plupart des étudiants qui suivent un cours de programmation en langage assembleur ont déjà été initiés aux structures de flux de contrôle de haut niveau , telles que IF, WHILE, FOR, etc. HLA permet aux étudiants d'appliquer immédiatement ces connaissances en programmation au codage en langage assembleur au début de leur cours, ce qui leur permet maîtriser d'autres sujets prérequis en assembleur avant d'apprendre à coder des formes de bas niveau de ces structures de contrôle. Le livre The Art of Assembly Language Programming de Randall Hyde utilise HLA à cette fin.

Assembleur de haut niveau ou de bas niveau

L'assembleur HLA v2.x prend en charge les mêmes instructions machine de bas niveau qu'un assembleur de bas niveau standard. La différence est que les assembleurs de haut niveau, tels que HLA, Microsoft Macro Assembler (MASM) ou Turbo Assembler (TASM), sur la famille de processeurs Intel x86 , prennent également en charge les instructions de type langage de haut niveau, telles que IF, WHILE , et ainsi de suite, et des directives de déclaration de données plus sophistiquées, telles que des structures - records , unions et même classes .

Contrairement à la plupart des autres outils assembleur, le compilateur HLA comprend une bibliothèque standard avec des milliers de fonctions, procédures et macros qui peuvent être utilisées pour créer des applications complètes avec la facilité d'un langage de haut niveau. Bien que les bibliothèques en langage assembleur ne soient pas nouvelles, un langage qui inclut une grande bibliothèque standardisée rend les programmeurs beaucoup plus susceptibles d'utiliser ce code de bibliothèque plutôt que d'écrire simplement leurs propres fonctions de bibliothèque.

HLA prend en charge toutes les mêmes instructions machine de bas niveau que les autres assembleurs x86. De plus, les structures de contrôle de haut niveau de HLA sont basées sur celles trouvées dans MASM et TASM, dont les caractéristiques de type HLL ont précédé l'arrivée de HLA de plusieurs années. En HLA, le code assembleur de bas niveau peut être écrit aussi facilement qu'avec n'importe quel autre assembleur en ignorant simplement les constructions de contrôle HLL. Contrairement aux HLL comme Pascal et C(++), HLA ne nécessite pas d'instructions asm en ligne. Dans HLA, les fonctionnalités de type HLL semblent fournir une aide à l'apprentissage pour les programmeurs en assembleur débutants en lissant la courbe d'apprentissage, en supposant qu'ils cesseront d'utiliser ces instructions une fois qu'ils auront maîtrisé le jeu d'instructions de bas niveau. En pratique, de nombreux programmeurs expérimentés continuent à utiliser des instructions de type HLL dans HLA, MASM et TASM, bien après avoir maîtrisé le jeu d'instructions de bas niveau, mais cela est généralement fait pour améliorer la lisibilité.

Il est également possible d'écrire des programmes de haut niveau en utilisant HLA, évitant une grande partie de l'ennui de la programmation en langage assembleur de bas niveau. Certains programmeurs en langage assembleur rejettent d'emblée le HLA, car il permet aux programmeurs de le faire. Cependant, la prise en charge de la programmation de haut niveau et de bas niveau donne à tout langage une plage d'applicabilité étendue. Si l'on ne doit faire que du codage de bas niveau uniquement, c'est possible. Si l'on doit écrire un code plus lisible, l'utilisation d'instructions de niveau supérieur est une option.

Caractéristiques distinctives

Deux fonctionnalités HLA le distinguent des autres assembleurs x86 : son puissant système de macros (langage de compilation) et la bibliothèque standard HLA.

Système de macros

Le langage de compilation de HLA permet d'étendre facilement le langage, même de créer de petits langages spécifiques à un domaine pour aider à résoudre facilement les problèmes de programmation courants. La macro stdout.putbrièvement décrite précédemment est un bon exemple de macro sophistiquée qui peut simplifier la programmation. Considérez l'invocation suivante de cette macro :

stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );

La macro stdout.put traite chacun des arguments pour déterminer le type de l'argument, puis appelle une procédure appropriée dans la bibliothèque HLA Standard pour gérer la sortie de chacun de ces opérandes.

La plupart des assembleurs fournissent une sorte de capacité de macro : l'avantage que HLA offre par rapport aux autres assembleurs est qu'il peut traiter des arguments de macro comme l' r:10:2utilisation des fonctions de chaîne de compilation étendues de HLA, et les fonctions de macro de HLA peuvent déduire les types de variables et utiliser ces informations pour diriger extension de macros.

Le langage macro de HLA fournit une fonction macro spéciale sans contexte . Cette fonctionnalité permet d'écrire facilement des macros qui couvrent d'autres sections de code via une paire de macros de début et de fin (avec des invocations de macro intermédiaires facultatives qui ne sont disponibles qu'entre les macros de début et de fin). Par exemple, on peut écrire une instruction SWITCH–CASE–DEFAULT–ENDSWITCH entièrement récursive en utilisant cette fonction de macro.

En raison de la conception sans contexte des fonctions de macro HLA, ces instructions switch..case..default..endswitch peuvent être imbriquées et le code émis par les instructions imbriquées n'entrera pas en conflit avec les instructions externes.

Langage de compilation

Le système de macro HLA est en fait un sous-ensemble d'une fonctionnalité plus vaste connue sous le nom de langage HLA Compile-Time (CTL). Le HLA CTL est un langage interprété qui est disponible dans un fichier source de programme HLA. Un interpréteur exécute des instructions HLA CTL lors de la compilation d'un fichier source HLA ; d'où le nom de langage de compilation .

Le HLA CTL comprend de nombreuses instructions de contrôle telles que #IF, #WHILE, #FOR, #PRINT, une instruction d'affectation, etc. On peut également créer des variables et des constantes de compilation (y compris des types de données structurés tels que des enregistrements et des unions). Le HLA CTL fournit également des centaines de fonctions intégrées (y compris un ensemble très riche de fonctions de correspondance de chaînes et de modèles). Le HLA CTL permet aux programmeurs de créer des programmes CTL qui analysent et analysent des chaînes, permettant à ces programmeurs de créer des langages intégrés spécifiques à un domaine (EDSL, également appelés mini-langages ). La stdout.putmacro apparaissant plus haut est un exemple d'un tel EDSL. La macro put (dans l'espace de noms stdout, d'où le nom stdout .put) analyse sa liste de paramètres de macro et émet le code qui affichera ses opérandes.

Bibliothèque standard

La bibliothèque standard HLA est un ensemble complet de routines et de macros pré-écrites (comme la macro stdout.put décrite ci-dessus) qui facilitent la vie des programmeurs, leur évitant de réinventer la roue chaque fois qu'ils écrivent une nouvelle application. Peut-être tout aussi important, la bibliothèque standard HLA permet aux programmeurs d'écrire des applications portables qui s'exécutent sous Windows ou Linux sans rien de plus que de recompiler le code source . Comme la bibliothèque standard C pour le langage de programmation C , la bibliothèque standard HLA permet d'abstraire les appels de système d'exploitation (OS) de bas niveau , de sorte que le même ensemble d' interfaces de programmation d'application (API) OS peut servir pour tous les systèmes d'exploitation pris en charge par HLA. Alors qu'un langage assembleur permet d'effectuer tous les appels de système d'exploitation nécessaires, lorsque les programmes utilisent l'ensemble d'API de bibliothèque standard HLA, l'écriture de programmes portables par système d'exploitation est facile.

La bibliothèque standard HLA fournit des milliers de fonctions, procédures et macros. Bien que la liste change au fil du temps, à la mi-2010 pour HLA v2.12, elle comprenait des fonctions dans ces catégories :

  • Traitement des arguments en ligne de commande
  • Déclaration et manipulation de tableaux (dynamiques)
  • Manipulation de bits
  • Manipulation de blob (grand objet binaire)
  • Manipulation des personnages
  • Conversions
  • Manipulation des jeux de caractères
  • Fonctions date et heure
  • E/S de fichiers orientées objet
  • E/S de fichier standard
  • Fonctions de manipulation du système de fichiers, par exemple, supprimer, renommer, changer de répertoire
  • Déclarations et fonctions liées au HLA
  • La bibliothèque HLA Object Windows : framework orienté objet pour la programmation Win32
  • Manipulation de liste chaînée
  • Fonctions mathématiques
  • Allocation et gestion de la mémoire
  • API spécifiques à FreeBSD
  • API spécifiques à Linux
  • API spécifiques à MacOS
  • API spécifiques à Win32
  • Fonctions de la console de texte
  • Assistance coroutine
  • Prise en charge des variables d'environnement
  • Prise en charge de la gestion des exceptions
  • Prise en charge des fichiers mappés en mémoire
  • Prise en charge des sockets et des objets client-serveur
  • Prise en charge des threads et de la synchronisation
  • Fonctions de minuterie
  • Prise en charge de la correspondance de modèles pour les expressions régulières et les langages sans contexte
  • Générateurs de nombres aléatoires
  • Prise en charge des appels de procédure à distance
  • Fonctions de sortie d'erreur standard
  • Fonctions de sortie standard
  • Fonctions d'entrée standard
  • Fonctions de chaîne
  • Support de table (associatif)
  • Fonctions de chaîne terminées par zéro

Conception

Le système de langage HLA v2.x est un outil basé sur la ligne de commande qui se compose de plusieurs composants, y compris un programme shell (par exemple, hla.exe sous Windows), le compilateur de langage HLA (par exemple, hlaparse.exe), un traducteur (par exemple, le HLABE, ou HLA Back Engine), un éditeur de liens (link.exe sous Windows, ld sous Linux) et d'autres outils tels qu'un compilateur de ressources pour Windows. Les versions antérieures à 2.0 reposaient sur un back-end assembleur externe ; les versions 2.x et ultérieures de HLA utilisent le HLABE intégré comme formateur de code objet principal.

L' application shell HLA traite les paramètres de ligne de commande et achemine les fichiers appropriés vers chacun des programmes qui composent le système HLA. Il accepte comme .hlafichiers d' entrée (fichiers sources HLA), .asmfichiers (fichiers sources pour les assembleurs MASM, TASM, FASM, NASM ou Gas), .objfichiers d'entrée pour l'éditeur de liens et .rcfichiers (à utiliser par un compilateur de ressources).

Traduction du code source

A l' origine, l'outil HLA v1.x compilé le code source en un fichier source intermédiaire d' un back-end assembleur comme MASM, TASM, assembleur plat ( FASM ), netwide assembler (NASM), ou GNU Assembler (gaz) se traduirait le fichier de code objet de bas niveau. À partir de HLA v2.0, HLA incluait son propre HLA Back Engine (HLABE) qui fournissait la traduction du code objet de bas niveau. Cependant, via divers paramètres de ligne de commande, HLA v2.x a toujours la possibilité de traduire un fichier source HLA en un fichier source compatible avec l'un de ces autres assembleurs.

Moteur de retour HLA

Le HLA Back Engine (HLABE) est un back-end de compilateur qui traduit un langage intermédiaire interne en un exécutable portable (PE) de bas niveau , un format de fichier d'objet commun ( COFF ), un format exécutable et pouvant être lié (ELF) ou un code objet Mach-O . . Un programme HLABE se compose principalement d'instructions d'émission de données (octets), d'instructions d'adresses relocalisables 32 bits, d'instructions de transfert de contrôle x86 et de diverses directives. En plus de traduire les déclarations d'octets et d'adresses relocalisables dans le format de code objet de bas niveau, HLABE gère également l'optimisation du déplacement de branche (en choisissant la forme la plus courte possible d'une instruction de branche).

Bien que HLABE soit incorporé dans le compilateur HLA v2.x, il s'agit en fait d'un produit distinct. Il est du domaine public et open source (hébergé sur SourceForge.net ).

Voir également

Remarques

Les références

Lectures complémentaires

Liens externes