**Ассемблер** (аз англ. assemble — ҷамъ намудан, сохтан) — компилятор аз **забони ассемблер** ба фармонҳои забони мошинӣ мебошад.

Под каждую архитектуру процессора и под каждую ОС или семейство ОС существует свой Ассемблер. Существуют также так называемые «кросс-ассемблеры», позволяющие на машинах с одной архитектурой (или в среде одной ОС) ассемблировать программы для другой целевой архитектуры или другой ОС, и получать исполняемый код в формате, пригодном к исполнению на целевой архитектуре или в среде целевой ОС.

Архитектура x86
---------------

### Ассемблеры для DOS

Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM) и Macro Assembler (MASM). Также в своё время был популярен простой ассемблер A86.

Изначально они поддерживали лишь 16-битные команды (до появления процессора Intel 80386). Более поздние версии TASM и MASM поддерживают и 32-битные команды, а также все команды, введённые в более современных процессорах, и системы команд, специфических для конкретной архитектуры (такие как, например, MMX, SSE, 3DNow! и т. д.).

### Microsoft Windows

При появлении операционной системы Microsoft Windows появилось расширение TASM, именуемое TASM32, позволившее создавать программы для выполнения в среде Windows. Последняя известная версия Tasm — пятая, включая различные к ней дополнения. Но официально развитие программы полностью остановлено.

Совсем по-другому обстоит дело с программой MASM. Она продолжает развиваться и по сей день, последние версии включены в наборы DDK. Но версия программы, направленная на создание программ для DOS, не развивается.

Для более удобного создания программ на ассемблере для Windows появился пакет, названный MASM32, автором которого является Стивен Хатчессон (aka hutch--). Более подробная информация доступна на сайте пакета MASM32 — www.masm32.com

Настоящие ценители языка используют ассемблер FASM, бескорыстно предоставленный в общее пользование и написанный Томазом Грижтаром (Tomasz Grysztar). Официальный сайт ассеблера FASM — www.flatassembler.net

### Linux-based

Несколько иначе обстоит ситуация с ассемблерами для другой известной операционной системы GNU/Linux. В её состав входит компилятор gcc, включающий в себя ассемблер gas (GNU Assembler)…
Но в нём используется AT&T синтаксис, в отличие от Intel-синтаксиса, используемого в большинстве остальных ассемблеров.

### Переносимые ассемблеры

Также существует открытый проект ассемблера, версии которого доступны под различные операционные системы, и который позволяет получать объектные файлы для этих систем. Называется этот ассемблер NASM (Netwide Assembler).

YASM это переписанная с нуля версия NASM под лицензией BSD (с некоторыми исключенями).

FASM — молодой, но быстро развивающийся и завоёвывающий популярность ассемблер,
распространяется с исходным кодом, есть версии для KolibriOS, GNU/Linux и Microsoft Windows, использует Intel-синтаксис. Также fasm поддерживает инструкции AMD64.
Достоинством является очень сильный макроязык, разнообразие форматов выходных файлов и несколько изменённый (в лучшую сторону, но несколько непривычный для «старой школы») синтаксис.

Архитектуры RISC
----------------

### MCS-51

### AVR

На данный момент существуют 2 компилятора производства Atmel (AVRStudio 3 и AVRStudio4). Вторая версия — попытка исправить не очень удачную первую. Так же асемблер есть в составе WinAVR.

### ARM

### AVR32

### PowerPC

Ассемблирование и компилирование
--------------------------------

Процесс трансляции программы на языке ассемблера в объектный код принято называть ассемблированием. В отличии от компилирования, ассемблирование — более или менее однозначный и обратимый процесс. В языке ассемблера каждой мнемонике соответветствует одна машинная инструкция, в то время как в языках программирования высокого уровня за каждым выражением может скрываться большое количество различных инструкций. В принципе, это деление достаточно условно, поэтому иногда трансляцию ассемблерных программ также называют компиляцией.

См. также
---------

* Дизассемблер
* Язык ассемблера
* Макропроцессор