Асемблер - це програма для перекладу мнемоніки команд в машинний код. Дослівно "Assembler" перекладається як "збирач", тобто Асемблер збирає коди. Мова, якою записуються інструкції для програми Асемблер, називається мовою Асемблера.
Команди мови асемблера один в один відповідають командам процесора і, фактично, являють собою зручну символьну форму запису (мнемокод) команд і аргументів. Також, мова асемблера забезпечує зв'язування частин програми і даних тих через мітки, що виконується при асемблюванні (для кожної мітки вираховується адресу, після чого кожне входження мітки замінюється на цю адресу).
Кожна модель процесора, в принципі, має свій набір команд і відповідний йому мову (або діалект) асемблера.
Зазвичай програми або ділянки коду пишуться на мові асемблера у випадках, коли розробнику критично важливо оптимізувати такі параметри, як швидкодія (наприклад, при створенні драйверів) і розмір коду (завантажувальні сектора, програмне забезпечення для мікроконтролерів і процесорів з обмеженими ресурсами, віруси, навісні захисту ).
Асемблювання і компіляція
- Процес трансляції програми на мові асемблера в об'єктний код прийнято називати асемблюванні. На відміну від компілювання, ассемблирование - більш-менш однозначний і оборотний процес. У мові асемблера кожної мнемонике соответветствует одна машинна інструкція, в той час як в мовах програмування високого рівня за кожним виразом може ховатися велика кількість різних інструкцій. В принципі, це поділ досить умовно, тому іноді трансляцію ассемблерних програм також називають компіляцією.
Асемблери для x86
- Borland Turbo Assembler (TASM), Microsoft Macro Assembler (MASM), MASM32, FASM , NASM, Unix Assembler (AS) і GNU Assembler (GAS) (Unix-подібні системи)
Переваги мови асемблера
- Максимально оптимальне використання коштів процесора, використання меншої кількості команд і звернень в пам'ять, і як наслідок - велика швидкість і менший розмір програми.
- Використання розширених наборів інструкцій процесора (MMX, SSE, SSE2, SSE3).
Доступ до портів вводу-виводу і особливим регістрів процесора (у більшості ОС ця можливість доступна тільки на рівні модулів ядра і драйверів). - Можливість використання самомодіфіцірующіхся (у тому числі переміщуваного) коду (під багатьма платформами ця можливість недоступна, оскільки запис в сторінки коду заборонена, в тому числі і апаратно, проте в більшості загальнодоступних систем через їх вроджених вад є можливість виконання коду міститься в сегменті (секції) даних, куди запис дозволена).
- Максимальна «підгонка» для потрібної платформи.
Недоліки мови асемблера
- Великі обсяги коду, велике число додаткових дрібних завдань, менша кількість доступних для використання бібліотек, у порівнянні з мовами високого рівня.
- Трудомісткість читання та пошуку помилок (хоча тут багато що залежить від коментарів і стилю програмування).
- Найчастіше компілятор мови високого рівня, завдяки сучасним алгоритмам оптимізації, дає більш ефективну програму (за співвідношенням якість / час розробки).
- Непереносимість на інші платформи (крім сумісних).
- Асемблер складніший для спільних проектів.
Джерела:
- wiki.xakep.ru - визначення "Асемблер".
- ru.wikipedia.org - визначення "Мова асемблера".
Додаткова інформація:
- cyberguru.ru - статті про програмування на мові Асемблера.
- wasm.ru - сайт, присвячений програмуванню на мові Асемблера.