Ассемблер

Ассе́мблер (от  — сборщик) — транслятор программы из текста на языке ассемблера, в программу на машинном языке.

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

Многие современные ассемблеры являются макроассемблерами (от  — большой, обширный), то есть макропроцессорами на базе языка ассемблера. Кроме макросов, ассемблеры при трансляции выполняют другие директивы, набор которых зависит не от аппаратной платформы, для которой транслируется программа, а от самого используемого транслятора.

Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. В свою очередь, результатом ассемблирования может быть не исполняемый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью редактора связей (линкера) может быть получен исполняемый файл.

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

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

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

Windows 
При появлении операционной системы Windows появилось расширение TASM, именуемое TASM 5+ (неофициальный пакет, созданный человеком с ником neonovd’), позволившее создавать программы для выполнения в среде Windows. Последняя известная версия TASM — 5.3, поддерживающая инструкции MMX, на данный момент включена в Turbo C++ Explorer. Но официально развитие программы полностью остановлено. Последнее развитие компилятор получил благодаря современной среде разработки TASM Visual. Среда неофициальная, но с её помощью работа с компилятором многократно упрощается.

Microsoft поддерживает свой продукт под названием Microsoft Macro Assembler. Она продолжает развиваться и по сей день, последние версии включены в наборы DDK. Но версия программы, направленная на создание программ для DOS, не развивается. Кроме того, Стивен Хатчессон создал пакет для программирования на MASM под названием «MASM32».

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

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

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

flat assembler (fasm) — молодой ассемблер под модифицированной для запрета перелицензирования (в том числе под GNU GPL) BSD-лицензией. Есть версии для KolibriOS, Linux, DOS и Windows; использует Intel-синтаксис и поддерживает инструкции x86-64.

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

MCS-51 
MCS-51 (Intel 8051) — классическая архитектура микроконтроллера. Для неё существует кросс-ассемблер ASM51, выпущенный корпорацией MetaLink.

Кроме того, многие фирмы-разработчики программного обеспечения, такие, как IAR или Keil, представили свои варианты ассемблеров. В ряде случаев применение этих ассемблеров оказывается более эффективным благодаря удобному набору директив и наличию среды программирования, объединяющей в себе профессиональный ассемблер и язык программирования Си, отладчик и менеджер программных проектов.

AVR 
На данный момент для AVR существуют 4 компилятора производства Atmel (AVRStudio 3, AVRStudio 4, AVRStudio 5 и AVRStudio 6, AVRStudio 7).

В рамках проекта AVR-GCC (он же WinAVR) существует компилятор avr-as (это портированный под AVR ассемблер GNU as из GCC).

Также существует свободный минималистический компилятор avra.

Платные компиляторы: IAR (EWAVR), CodeVisionAVR, Imagecraft. Данные компиляторы поддерживают языки Assembler и C, а IAR ещё и C++.

Существует компилятор с языка BASIC — BASCOM, также платный.

ARM 
Для процессоров ARM существует достаточно широкий выбор компиляторов, внутренняя реализация которых зависит от непосредственно производителя данного ARM-процессора либо разработчика IDE для работы с ARM-процессорами. Официальным компилятором ARM, непосредственно от компании ARM, является  ARM Compiler 6, который входит в IDE DS-5 Development Studio и поддерживает компиляцию программ на языках Си и C++.
Компиляторы от поставщиков ARM процессоров и разработчиков ARM toolchain:

PIC 
Средой разработки, выпускаемой компанией Microchip Technology для создания, редактирования и отладки программ для микроконтроллеров семейства PIC, является MPLAB. Среда включает в себя трансляторы с языка ассемблер MPASM и ASM30 для различных семейств микроконтроллеров PIC. Современные версии среды «MPLAB X IDE» являются мультиплатформенными и работают под различными операционными системами для ЭВМ. Среда распространяется бесплатно.

AVR32

MSP430

PowerPC 

Программный пакет The PowerPC Software Development Toolset от IBM включает в себя ассемблер для PowerPC.

MIPS

Архитектура виртуальной машины ассемблера

Ассемблер fasmg (архитектура CALM-инструкций) 
Является наследником ассемблера flat assembler (fasm) со схожим синтаксисом, но в отличие от fasm не привязан ни к какой архитектуре процессора. Его парадигмой является формирование посредством макросов выходных файлов любых форматов и с машинным кодом под любые архитектуры процессоров. Помимо макросов в fasmg присутствуют т. наз. CALM-инструкции (букв. «инструкции компилируемой сборки, подобные макросам») — собственные инструкции виртуальной машины ассемблера, эквивалентные макросам, которые преобразуются транслятором в байт-код. Архитектуру этих CALM-инструкций можно считать «родной» архитектурой ассемблера fasmg. В комплекте имеются наборы CALM-инструкций для эмуляции поддержки инструкций архитектур x86, x64, 8052, AVR; разработчиком могут быть описаны наборы CALM-инструкций для поддержки любой другой архитектуры, поддержки любых выходных форматов файлов. Имеются вариации транслятора для Mac OS, Linux и Windows.

См. также 
 Язык ассемблера
 Дизассемблер
 Макропроцессор

Примечания

Литература 
 Вострикова З. П. Программирование на языке ассемблера ЕС ЭВМ. М.: Наука, 1985.
 
 
 
 
 Магда Ю. С. Ассемблер. Разработка и оптимизация Windows-приложений. СПб.: БХВ-Петербург, 2003.
 Нортон П., Соухэ Д. Язык ассемблера для IBM PC. М.: Компьютер, 1992.
 
 
 
 Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. М.: Радио и связь, 1989.
 

Языки программирования со статическим распределением памяти