У В?к?пед?? ? статт? про ?нш? значення цього терм?на:
ASM
.
Асе?мблер
(
англ.
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
, ? асемблер коректно визначить адреси переходу на них в межах дано? процедури.
- Транслятори:
- 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