Sestava na vysoké úrovni - High Level Assembly

Sestava na vysoké úrovni (HLA)
VývojářiRandall Hyde
Stabilní uvolnění
2.16 / 6. července 2011; Před 9 lety (2011-07-06)
Úložištěsourceforge.síť/ projekty/ hlav1
NapsánoMontážní jazyk
Operační systémOkna, Linux, FreeBSD, Operační Systém Mac
PlošinaIA-32
K dispozici vAngličtina
TypAssembler
LicenceVeřejná doména
webová stránkaplantážní produkce.com/ Webster

Sestava na vysoké úrovni (HLA) je montážní jazyk na vysoké úrovni vyvinutý uživatelem Randall Hyde. Umožňuje použití konstruktů jazyků vyšší úrovně, aby pomohly začátečníkům i pokročilým vývojářům sestavení. Plně podporuje pokročilé typy dat a objektově orientované programování. Používá syntaxi volně založenou na několika programovací jazyky na vysoké úrovni (HLLs), jako je Pascal, Ada, Modula-2, a C ++, umožnit vytváření čitelných programů v assembleru a umožnit programátorům HLL naučit se HLA co nejrychleji.

Počátky a cíle

HLA byla původně koncipována jako nástroj pro výuku programování montážního jazyka na úrovni univerzit. Cílem je využít stávající znalosti programování studentů, když se učí jazyk montáže, aby je co nejrychleji zrychlily. Většina studentů absolvujících kurz programování v montážním jazyce již byla představena na vysoké úrovni regulační tok struktury, jako IF, WHILE, FOR atd. HLA umožňuje studentům okamžitě aplikovat tyto znalosti programování na kódování jazyka sestavení na začátku jejich kurzu, což jim umožňuje osvojit si další základní předměty při sestavování, než se naučí kódovat jejich nízké úrovně kontrolní struktury. Kniha Umění programování jazyků shromáždění od Randall Hyde používá pro tento účel HLA.[1]

Sestavovač vysoké vs. nízké úrovně

Sestavovač HLA v2.x podporuje stejné pokyny pro nízkoúrovňový stroj jako běžný nízkoúrovňový asembler. Rozdíl je v tom, že vysoce postavení montéři, jako je HLA, Microsoft Macro Assembler (MASM) nebo Turbo Assembler (TASM), na Intel x86 rodina procesorů, také podporují příkazy podobné jazykům na vysoké úrovni, jako je IF, WHILE atd., a směrodatné směrnice pro deklaraci dat, například struktur -evidence, odbory, a dokonce třídy.

Na rozdíl od většiny ostatních nástrojů pro sestavování obsahuje kompilátor HLA a Standardní knihovna s tisíci funkce, postupy, a makra které lze použít k vytvoření úplných aplikací s lehkostí na vysoké úrovni. Zatímco montážní jazyk knihovny nejsou nové, díky jazyku, který obsahuje velkou standardizovanou knihovnu, je mnohem pravděpodobnější, že programátoři použijí takový kód knihovny, než aby jednoduše psali své vlastní funkce knihovny.

HLA podporuje všechny stejné nízkoúrovňové instrukce stroje jako ostatní x86 assemblery. Dále jsou řídicí struktury HLA na vysoké úrovni založeny na strukturách nalezených v MASM a TASM, jejichž vlastnosti podobné HLL předcházely příchod HLA o několik let. V HLA lze nízkoúrovňový kód sestavy zapsat stejně snadno jako u jakéhokoli jiného assembleru jednoduchým ignorováním konstrukcí ovládacích prvků HLL. Na rozdíl od HLL, jako jsou Pascal a C (++), HLA nevyžaduje vložené příkazy asm. V HLA se zdá, že funkce podobné HLL poskytují učební pomůcku pro začínající programátory sestavování tím, že vyhlazují křivku učení, za předpokladu, že přestanou používat tyto příkazy, jakmile zvládnou sadu instrukcí na nízké úrovni. V praxi mnoho zkušených programátorů nadále používá příkazy podobné HLL v HLA, MASM a TASM, dlouho po zvládnutí sady instrukcí na nízké úrovni, ale obvykle se to dělá kvůli zlepšení čitelnosti.

Je také možné psát vysoká úroveň programy využívající HLA, vyhýbajíc se velké části nudného programování na nízké úrovni v assembleru. Někteří programátoři montážního jazyka odmítají HLA z ruky, protože to programátorům umožňuje. Podpora programování na vysoké i nízké úrovni však dává každému jazyku rozšířený rozsah použitelnosti. Pokud je třeba provést pouze kódování pouze na nízké úrovni, je to možné. Pokud je třeba napsat čitelnější kód, je možné použít příkazy vyšší úrovně.

Charakteristické rysy

Dvě funkce HLA jej odlišují od ostatních sestavovačů x86: výkonný systém maker (jazyk kompilace) a standardní knihovna HLA.

Makro systém

Jazyk HLA v době kompilace umožňuje snadné rozšíření jazyka, a to i na vytváření malých jazyky specifické pro doménu pomoci snadno vyřešit běžné problémy s programováním. Makro standardní výstup krátce popsaný dříve je dobrým příkladem propracovaného makra, které může zjednodušit programování. Zvažte následující vyvolání daného makra:

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

Makro stdout.put zpracovává každý z argumentů k určení typu argumentu a poté volá příslušnou proceduru v knihovně HLA Standard pro zpracování výstupu každého z těchto operandů.

Většina assemblerů poskytuje určitý druh schopností maker: výhodou, kterou HLA nabízí oproti jiným assemblerům, je to, že dokáže zpracovat makro argumenty jako r: 10: 2 pomocí rozsáhlých funkcí řetězce HLA v době kompilace a funkcí maker HLA lze odvodit typy proměnných a použít tyto informace k přímé expanzi maker.

Makro jazyk HLA poskytuje speciální Bez kontextu makro zařízení. Tato funkce umožňuje snadno psát makra, která překlenují ostatní části kódu pomocí a začíná a ukončení makro pár (spolu s volitelným středně pokročilí vyvolání makra, která jsou k dispozici pouze mezi makry začátku a konce). Například lze pomocí tohoto makra napsat plně rekurzivně vnořitelný příkaz SWITCH – CASE – DEFAULT – ENDSWITCH.

Z důvodu bezkontextového návrhu zařízení HLA maker mohou být tyto příkazy switch..case..default..endswitch vnořeny a vygenerovaný kód vnořených příkazů nebude v rozporu s vnějšími příkazy.

Jazyk kompilace

Makrosystém HLA je ve skutečnosti podmnožinou větší funkce známé jako HLA Jazyk kompilace (CTL). HLA CTL je interpretovaný jazyk, který je k dispozici ve zdrojovém souboru programu HLA. Tlumočník provádí příkazy HLA CTL během kompilace zdrojového souboru HLA; odtud název jazyk kompilace.

HLA CTL obsahuje mnoho řídicích příkazů, jako je #IF, #WHILE, #FOR, #PRINT, příkaz přiřazení[je zapotřebí objasnění ] a tak dále. Lze také vytvořit proměnné a konstanty kompilace (včetně strukturovaných datových typů, jako jsou záznamy a odbory). HLA CTL také poskytuje stovky vestavěných funkcí (včetně velmi bohaté sady funkcí řetězců a porovnávání vzorů). HLA CTL umožňuje programátorům vytvářet CTL programy které skenují a analyzují řetězce, což těmto programátorům umožňuje vytvářet vložený jazyky specifické pro doménu (EDSL, také nazývané minijazyky ). The standardní výstup makro, které se objeví dříve, je příkladem takového EDSL. Put makro (ve jmenném prostoru stdout, odtud název stdout.put) analyzuje svůj seznam parametrů makra a vydá kód, který vytiskne jeho operandy.

Standardní knihovna

Standardní knihovna HLA je rozsáhlá sada předepsaných rutin a maker (jako je výše popsané makro stdout.put), které programátorům usnadňují život a brání jim v objevování nového kola při každém psaní nové aplikace. Možná stejně důležité je, že standardní knihovna HLA umožňuje programátorům psát přenosné aplikace, které běží pod Windows nebo Linuxem, s ničím jiným než rekompilací zdrojový kód. Jako C standardní knihovna pro programovací jazyk C, standardní knihovna HLA umožňuje abstrahovat na nízké úrovni operační systém (OS) hovory, takže stejná sada OS aplikační programovací rozhraní (API) mohou sloužit pro všechny operační systémy, které HLA podporuje. Zatímco jazyk sestavení umožňuje uskutečňovat všechna potřebná volání OS, kde programy používají sadu rozhraní HLA Standard Library API, psaní programů přenosných přes OS je snadné.

Standardní knihovna HLA poskytuje tisíce funkcí, procedur a maker. I když se seznam v průběhu času mění, od poloviny roku 2010 pro HLA v2.12 obsahoval funkce v těchto kategoriích:

  • Zpracování argumentů příkazového řádku
  • Deklarace polí a manipulace s nimi
  • Manipulace s bitem
  • Manipulace s blobem (binárním velkým objektem)
  • Manipulace s postavami
  • Převody
  • Manipulace se znakovou sadou
  • Funkce data a času
  • Objektově orientovaný vstup / výstup souborů
  • Standardní I / O souborů
  • Manipulační funkce systému souborů, např. Mazání, přejmenování, změna adresáře
  • Deklarace a funkce související s HLA
  • Knihovna Windows HLA Object: objektově orientovaný rámec pro programování Win32
  • Manipulace se spojeným seznamem
  • Matematické funkce
  • Přidělování a správa paměti
  • API specifická pro FreeBSD
  • Specifická rozhraní API pro Linux
  • Specifická rozhraní API pro MacOS
  • API specifická pro Win32
  • Funkce textové konzoly
  • Běžná podpora
  • Podpora proměnných prostředí
  • Podpora zpracování výjimek
  • Podpora souborů mapovaných do paměti
  • Podpora soketů a objektů klient-server
  • Podpora vláken a synchronizace
  • Funkce časovače
  • Podpora shody vzorů pro regulární výrazy a bezkontextové jazyky
  • Generátory náhodných čísel
  • Podpora vzdáleného volání procedur
  • Standardní funkce výstupu chyby
  • Standardní výstupní funkce
  • Standardní vstupní funkce
  • Řetězcové funkce
  • Tabulka (asociativní) podpora
  • Funkce řetězce s nulovým zakončením

Design

Jazykový systém HLA v2.x je nástroj poháněný příkazovým řádkem, který se skládá z několika komponent, včetně a skořápka hla.exe pod Windows), překladač jazyků HLA (např. hlaparse.exe), nízkoúrovňový překladač (např. HLABE nebo HLA Back Engine), a linker (link.exe v systému Windows, ld v systému Linux) a další nástroje, například kompilátor prostředků pro Windows. Verze před 2.0 se spoléhaly na zadní konec externího assembleru; verze 2.xa novější HLA používají vestavěný HLABE jako formátovač kódu objektu back-end.

HLA skořápka aplikace zpracovává parametry příkazového řádku a směruje příslušné soubory do každého z programů, které tvoří systém HLA. Přijímá jako vstup .hla soubory (zdrojové soubory HLA), .asm soubory (zdrojové soubory pro montéry MASM, TASM, FASM, NASM nebo Gas), .obj soubory pro vstup do linkeru a .rc soubory (pro použití kompilátorem prostředků).

Překlad zdrojového kódu

Nástroj HLA v1.x původně kompiloval svůj zdrojový kód do prostředního zdrojového souboru, který a back-end assembler jako MASM, TASM, flat assembler (FASM ), Netwide Assembler (NASM) nebo GNU Assembler (Gas) by se přeložit do souboru kódu objektu nízké úrovně. Od verze HLA v2.0 zahrnovala HLA vlastní Zadní motor HLA (HLABE), která poskytla překlad kódu objektu na nízké úrovni. Prostřednictvím různých parametrů příkazového řádku má však HLA v2.x stále schopnost přeložit zdrojový soubor HLA do zdrojového souboru, který je kompatibilní s jedním z těchto dalších assemblerů.

Zadní motor HLA

HLA Back Engine (HLABE) je back-end kompilátoru, který překládá interní intermediální jazyk na nízkou úroveň Přenosný spustitelný soubor (PE), Common File File Format (COFF ), Spustitelný a propojitelný formát (ELF) nebo Mach-O kód objektu. HLABE program většinou se skládá z prohlášení o emisích dat (bajtů), 32bitových příkazů přemístitelných adres, pokynů k přenosu x86 a různých směrnic. Kromě převodu bajtových a přemístitelných příkazů adres do formátu objektového kódu na nízké úrovni zpracovává HLABE také optimalizaci posunutí větve (výběr nejkratší možné formy instrukce větve).

Ačkoli je HLABE začleněn do kompilátoru HLA v2.x, ve skutečnosti jde o samostatný produkt. Je volným dílem a otevřeným zdrojem (hostováno na SourceForge.net ).

Viz také

Poznámky

  1. ^ "Umění programování jazyků shromáždění". Archivovány od originál dne 29. 3. 2018. Citováno 2010-02-12.

Reference

Další čtení

externí odkazy