Кіріспе
High Level Assembly (HLA) — Рэндалл Хайд жасаған, жоғары деңгейдегі тіл құрылымдарын пайдалануға жаңадан бастағандарға да, тәжірибелі ассемблерлерге де көмектесетін тіл. Ол кеңейтілген дерек түрлерін және объектіге бағытталған бағдарламалауды толыққанды қолдайды. Ол Pascal, Ada, Modula 2 және C++ сияқты бірнеше жоғары деңгейдегі бағдарламалау тілдеріне (HLL) шала негізделген синтаксисті қолданады, бұл оқуға ыңғайлы ассемблерлік бағдарламаларды жасауға және HLL бағдарламашыларына HLA-ны ең жылдам үйренуге мүмкіндік береді.
High Level Assembly (HLA) is a language developed by Randall Hyde that allows the use of higher level language constructs to aid both beginners and advanced assembly developers. It fully supports advanced data types and object oriented programming. It uses a syntax loosely based on several high level programming languages (HLLs), such as Pascal, Ada, Modula 2, and C++, to allow the creation of readable assembly language programs, and to allow HLL programmers to learn HLA as fast as possible.
Шығуы мен мақсаты
HLA бастапқыда колледж және университет деңгейінде ассемблер тілінде бағдарламалауды оқыту құралы ретінде жасалған. Мақсаты – студенттердің ассемблер тілін үйренген кездегі бар бағдарламалау білімдерін пайдаланып, оларды мүмкіндігінше жылдам дамыту. Көптеген студенттер ассемблер тілінде бағдарламалау курсын алғанда, IF, WHILE, FOR сияқты жоғары деңгейдегі басқару ағыны құрылымдарымен таныс болады. HLA студенттерге осы бағдарламалау білімдерін курстың басында ассемблер тілінде кодтауға бірден қолдануға мүмкіндік береді, соның арқасында олар басқару құрылымдарының төменгі деңгейдегі формаларын кодтауды үйрену алдында ассемблердегі басқа да қажетті пәндерді меңгеруге жетеді. Рэндалл Хайдтың "Ассемблер тілінде бағдарламалау өнері" кітабында осы мақсатта HLA қолданылады.
Айырмалы белгілері
HLA-ның екі ерекшелігі оны басқа x86 ассемблерлерінен ерекшелендіреді: оның қуатты макро жүйесі (компиляция уақытында жұмыс істейтін тіл) және HLA стандартты кітапханасы.
Макрожүйе
HLA-ның компиляция уақытындағы тілі оны оңай кеңейтуге мүмкіндік береді, тіпті жалпы бағдарламалау мәселелерін оңай шешуге көмектесетін кішкентай салалық тілдерді жасауға болады. `stdout.put` макросы – бағдарламалауды жеңілдететін күрделі макростың жақсы мысалы. Осы макростың келесі шақырылысын қарастырайық:
`stdout.put("I=", i, " s=", s, " u=", u, " r=", r:10:2, nl);`
`stdout.put` макросы әр аргументтің типін анықтау үшін оларды өңдейді, содан кейін HLA стандартты кітапханасындағы тиісті процедураны шақырып, осы операндардың әрқайсысының шығысын қамтамасыз етеді. Көптеген ассемблерлер макро мүмкіндіктерін ұсынады: HLA-ның басқа ассемблерлерден артықшылығы – HLA-ның кең ауқымды компиляция уақытындағы жол функцияларын пайдаланып, `r:10:2` сияқты макро аргументтерін өңдей алуы және HLA-ның макро мүмкіндіктері айнымалылардың типтерін анықтап, макро кеңейтуді бағыттау үшін осы ақпаратты пайдалана алады. HLA макро тілі арнайы контекстсіз макро мүмкіндігін ұсынады. Бұл мүмкіндік кодтың басқа бөліктерін қамтитын макростарды оңай жазуға мүмкіндік береді, олар басталу және аяқталу макро жұбы арқылы анықталады (сонымен қатар, басталу-аяқталу макролары арасында ғана қолжетімді болатын қосымша макро шақыруларымен бірге). Мысалы, осы мүмкіндікті пайдаланып, толық рекурсивті ұялатылатын `SWITCH–CASE–DEFAULT–ENDSWITCH` операторларын жазуға болады. HLA макросының контекстсіз дизайнының арқасында, бұл `switch–case–default–endswitch` операторларын ұялатуға болады, ал ұялатылған операторлардың генерацияланған коды сыртқы операторлармен қақтығыс тудырмайды.
Компиляция уақыты тілі
HLA макрожүйесі іс жүзінде HLA Compile Time Language (CTL) деп аталатын үлкен мүмкіндіктің кіші жиынтығы болып табылады. HLA CTL – HLA бағдарламасының бастапқы кодында қолжетімді түсіндірілетін тіл. Интерпретатор HLA CTL операторларын HLA бастапқы файлын компиляциялау кезінде орындайды; сондықтан ол компиляция уақыты тілі деп аталады. HLA CTL көптеген басқару операторларын қамтиды, мысалы #IF, #WHILE, #FOR, #PRINT, мәндерді тағайындау операторы және т.б. Компиляция уақытында айнымалылар мен тұрақтыларды (жазбалар мен біріктірулер сияқты құрылымдалған дерек түрлерін қоса алғанда) жасауға болады. HLA CTL сонымен қатар жүздеген кіріктірілген функцияларды ұсынады (оның ішінде жолдармен және үлгілерді салыстырумен жұмыс істейтін өте кең функциялар жиынтығы бар). HLA CTL бағдарламашыларға CTL бағдарламаларын жасауға мүмкіндік береді, олар жолдарды сканерлеп, талдай алады, соның арқасында бағдарламашылар ендірілген доменге арналған арнайы тілдерді (EDSL, сондай-ақ шағын тілдер деп те аталады) құруға мүмкіндік алады. stdout.put макросы – мұндай EDSL-дің мысалы. put макросы (stdout кеңістігінде, сондықтан stdout.put деп аталады) макро параметрлер тізімін талдайды және оның аргументтерін басып шығаратын кодты жасайды.
Дизайн
HLA v2.x тілдік жүйесі – бірнеше компоненттерден тұратын, командалық жол арқылы басқарылатын құрал, оның ішінде қабықша бағдарламасы (мысалы, Windows жүйесінде hla.exe), HLA тілінің компиляторы (мысалы, hlaparse.exe), төменгі деңгейдегі аудармашы (мысалы, HLABE немесе HLA Back Engine), байланыстырушы (Windows жүйесінде link.exe, Linux жүйесінде ld) және Windows үшін ресурстар компиляторы сияқты басқа құралдар бар. 2.0 нұсқасына дейінгілері сыртқы құрастырушының артқы бөлігіне тәуелді болды; HLA-ның 2.x және одан кейінгі нұсқалары HLABE-ні объектілік кодты артқы бөліктен форматтаушы ретінде пайдаланады. HLA қабықшасы бағдарламалық жасақтама командалық жол параметрлерін өңдеп, HLA жүйесін құрайтын әрбір бағдарламаға тиісті файлдарды жібереді. Ол кіріс ретінде hla файлдарын (HLA бастапқы файлдары), asm файлдарын (MASM, TASM, FASM, NASM немесе Gas құрастырушыларының бастапқы файлдары), байланыстырушыға берілетін obj файлдарын және rc файлдарын (ресурстар компиляторы үшін) қабылдайды.
Көшірме кодтың аудармасы
Бастапқыда HLA v1.x құралы өзінің бастапқы кодын аралық бастапқы файлға жинап, оны MASM, TASM, flat assembler (FASM), Netwide Assembler (NASM) немесе GNU Assembler (Gas) сияқты артқы аяқ құрастырғыштар төменгі деңгейдегі объектілік код файлына аударған. HLA v2.0 нұсқасынан бастап HLA өзінің HLA Back Engine (HLABE) құралын қосты, ол төменгі деңгейдегі объектілік кодты аударуды жүзеге асырады. Дегенмен, әртүрлі командалық қатар параметрлері арқылы HLA v2.x әлі де HLA бастапқы файлын осы басқа құрастырғыштардың бірімен үйлесімді бастапқы файлға аудару мүмкіндігін сақтайды.
HLA Арқадағы қозғалтқышы
HLA Back Engine (HLABE) - ішкі аралық тілді төменгі деңгейдегі Portable Executable (PE), Common Object File Format (COFF), Executable and Linkable Format (ELF) немесе Mach O объектілік кодына аударатын компилятордың артқы бөлігі. HLABE бағдарламасы көбінесе деректер (байт) шығару операторлары, 32 биттік қайта орналастырылатын мекенжай операторлары, x86 басқару беру нұсқаулары және әртүрлі директивалардан тұрады. Байт және қайта орналастырылатын мекенжай операторларын төменгі деңгейдегі объектілік код форматына аударудан басқа, HLABE тармақ ауытқуын оңтайландыруды (тармақ нұсқауларының ең қысқа мүмкін түрін таңдау) да жүзеге асырады. HLABE HLA v2.x компиляторына енгізілгенімен, ол жеке өнім болып табылады. Ол жалпыға қолжетімді және ашық кодты (SourceForge.net сайтында орналасқан).