Асемблер

Матер?ал з В?к?пед?? ? в?льно? енциклопед??.
Перейти до нав?гац?? Перейти до пошуку

Асе?мблер ( англ. assembler ) ? комп'ютерна програма- транслятор , що призначена для генерац?? машинного (дв?йкового) коду з символьного представлення цього коду ( мови асемблера ). Наприклад, текстовий рядок CLI для арх?тектури x86 перетворю?ться асемблером у дв?йковий код 11111010 . Кр?м власне трансляц??, багато програм-асемблер?в п?дтримують ? ?ншу функц?ональн?сть, корисну при розробц? системного ? прикладного програмного забезпечення, таку як виб?р формату об'?ктного модуля , генерац?я символьно? ?нформац?? (наприклад, в?длагоджувально?), р?зноман?тн? директиви на зразок EXTERN чи GLOBAL , макрокоманди тощо.

При трансляц?? з мов високого р?вня асемблер нер?дко використову?ться для виконання завершально? фази трансляц??.

?стор?я

[ ред. | ред. код ]

Один з перших асемблер?в було створено Натан?елем Рочестером для машини IBM 701 . Асемблер одразу полегшив працю першим програм?стам: зам?сть код?в машинних команд стало можливим писати програму у символьн?й (алфав?тно-цифров?й) форм?, ? найголовн?ше, в?дпала необх?дн?сть ручного перерахунку вс?х адрес переход?в при зм?н? програми. Асемблери 1950-х рок?в, що мали назву автокодер?в , були одними з перших, що надавали можлив?сть означення ? використання макрокоманд . Починаючи з 1960-1970-х рок?в зроста? важлив?сть вза?мод?? ? ?нтеграц?? програм ? фрагмент?в мовою асемблера з модулями, написаними на мовах програмування високого р?вня . До сьогодн? так? програми, як асемблер ? компонувальник ? абсолютно необх?дними ?нструментами при представленн? ново? арх?тектури комп'ютера чи процесора.

Базова трансляц?я

[ ред. | ред. код ]

Найпрост?шим способом перетворення символьних рядк?в на машинн? команди може бути пряма трансляц?я . Наприклад, з кожного наступного рядка тексту

 mov
 eax
,
 0F00BADh

 jmp
 eax

асемблером для 32-розрядно? арх?тектури x86 одразу може бути згенерований машинний код в?дпов?дно? команди процесора ? ?? аргумент?в ( B8 AD 0B F0 00 FF E0 ). Якщо ж у програм? присутн? команди безпосередньо переходу за м?тками , алгоритм роботи асемблера ускладню?ться: потр?бн? як м?н?мум два перегляди (або проходи) тексту програми. При першому перегляд? зд?йсню?ться розпод?л пам'ят? ? надання значень символ?чним ?менам; при другому ? форму?ться об'?ктний модуль . В процес? трансляц?? асемблер проводить повний синтаксичний анал?з початково? програми, забезпечуючи при цьому достатньо точну д?агностику помилок за м?сцем ? характером.

Розширен? можливост?

[ ред. | ред. код ]
Докладн?ше: Макроасемблер

На додачу до базово? трансляц??, одним з найб?льш вживаних механ?зм?в програм-асемблер?в ? макро?нструкц?? , починаючи з найпрост?шо? зам?ни тексту, ? до сучасних вбудованих макропроцесор?в, з довол? складними можливостями п?дстановки ? розкриття параметр?в. Наприклад, асемблери NASM ? YASM реал?зують власний стек макропроцесора ( директиви %push ? %pop ), можуть зд?йснювати зсув переданих макрокоманд? параметр?в на задану к?льк?сть ( %rotate ), повторювати ем?тування посл?довност? команд ( %rep / %endrep ), зд?йснювати умовну трансляц?ю (директиви %ifdef ? под?бн?). Пакети макрокоманд для багатих на можливост? асемблер?в надають програм?стам нав?ть механ?зм, наближен? до структурного програмування , коли програма на мов? асемблера вигляда? так, немов би вона м?стить так? сутност?, як процедури ? функц??, локальн? зм?нн? , структури даних з можлив?стю символ?чно? адресац?? пол?в, ?нструкц??-перемикач? ? тому под?бне. [1]

Асемблер NASM (а також майже повн?стю сум?сний YASM ) реал?зу? п?дтримку одразу к?лькох формат?в об'?ктних файл?в . Така можлив?сть надзвичайно корисна при крос-комп?ляц?? , коли, наприклад, на комп'ютер? з операц?йною системою GNU/Linux потр?бно отримати об'?ктний файл у формат? PE для систем типу Microsoft Windows . Можливо також задати трансляц?ю безпосередньо у формат дв?йкового коду ( bin ), коли потр?бна в?дпов?дн?сть ≪один в один≫ м?ж текстом програми ? згенерованим кодом.

Надзвичайно корисною ? п?дтримка локальних м?ток у процедурах. У великих програмах це дозволя? мати у кожн?й процедур? чи функц?? м?тки на кшталт exit чи error , ? асемблер коректно визначить адреси переходу на них в межах дано? процедури.

Асемблери для арх?тектури x86

[ ред. | ред. код ]
  • Транслятори:
    • MASM - Microsoft Macro Assembler, л?ценз?я Microsoft EULA
    • GAS - GNU Assembler, л?ценз?я GNU GPL
    • FASM - flat assembler, л?ценз?я BSD
    • NASM - Netwide Assembler, л?ценз?я BSD
    • RosASM
    • TASM - Turbo Assembler в?д Borland, пропр??тарний, п?дтримку припинено
    • Yasm - в?льний асемблер на основ? NASM, л?ценз?я BSD
    • WASM - Open Watcom Assembler, л?ценз?я Sybase Open Watcom Public License
    • GoAsm - в?льний асемблер в?д Джерем? Гордона

Асемблери для ?нших арх?тектур

[ ред. | ред. код ]
  • HLASM - High Level Assembler в?д IBM

Л?тература

[ ред. | ред. код ]

Посилання

[ ред. | ред. код ]
  1. Препроцесор NASM: головна документац?я . Арх?в ориг?налу за 21 с?чня 2018 . Процитовано 20 с?чня 2018 .