Ассе́мблер (от англ. assembler «сборщик») — транслятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык, ассемблеры, как правило, специфичны для конкретной архитектуры, операционной системы и варианта синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и операционных систем.
Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполняемый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью редактора связей может быть получен исполнимый файл.
Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM), Microsoft Macro Assembler (MASM) и Watcom Assembler (WASM). Также в своё время был популярен простой ассемблер A86.
При появлении операционной системы Windows появилось расширение TASM, именуемое TASM 5+ (неофициальный пакет, созданный человеком с ником !tE’), позволившее создавать программы для выполнения в среде Windows. Последняя известная версия TASM — 5.3, поддерживающая инструкции MMX, на данный момент включена в Turbo C++ Explorer. Но официально развитие программы полностью остановлено. Последнее развитие компилятор получил благодаря современной среде разработки TASM Visual. Среда неофициальная, но с её помощью работа с компилятором многократно упрощается.
Microsoft поддерживает свой продукт под названием Microsoft Macro Assembler. Она продолжает развиваться и по сей день, последние версии включены в наборы DDK. Но версия программы, направленная на создание программ для DOS, не развивается. Кроме того, Стивен Хатчессон создал пакет для программирования на MASM под названием «MASM32».
В состав операционной системы 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.
MCS-51 (Intel 8051) — классическая архитектура микроконтроллера. Для неё существует кросс-ассемблер ASM51, выпущенный корпорацией MetaLink.
Кроме того, многие фирмы-разработчики программного обеспечения, такие, как IAR или Keil, представили свои варианты ассемблеров. В ряде случаев применение этих ассемблеров оказывается более эффективным благодаря удобному набору директив и наличию среды программирования, объединяющей в себе профессиональный ассемблер и язык программирования Си, отладчик и менеджер программных проектов.
Пример программы на языке ASM-51 для микроконтроллера AT89S52:
mov SCON, #50h
mov TH1, #0FDh
orl TMOD, #20h
setb TR1
again:
clr RI
jnb RI, $
mov A, SBUF
jnb RI, $
clr TI
mov SBUF, A
jnb TI, $
sjmp again
Данная программа отправляет обратно полученный символ, через последовательный порт UART.
На данный момент для AVR существуют 4 компилятора производства Atmel (AVRStudio 3, AVRStudio 4, AVRStudio 5 и AVRStudio 6).
В рамках проекта AVR-GCC (он же WinAVR) существует компилятор avr-as (это портированный под AVR ассемблер GNU as из GCC).
Также существует свободный минималистический компилятор avra[1].
Платные компиляторы: IAR (EWAVR), CodeVisionAVR, Imagecraft. Данные компиляторы поддерживают языки Assembler и C, а IAR ещё и C++.
Существует компилятор с языка BASIC — BASCOM, также платный.
Для процессоров ARM существует достаточно широкий выбор компиляторов, внутренняя реализация которых зависит от непосредственно производителя данного ARM-процессора либо разработчика IDE для работы с ARM-процессорами. Официальным компилятором ARM, непосредственно от компании ARM, является ARM Compiler 6, который входит в IDE DS-5 Development Studio и поддерживает компиляцию программ на языках Си и С++.
Компиляторы от поставщиков ARM процессоров и разработчиков ARM toolchain:
Поставщик IDE | Компилятор | Поддерживаемые языки | Условия использования |
---|---|---|---|
Keil mVision | MDK-ARM | Си/С++/Assembler | Shareware (не более 32kb) |
IAR Embedded Workbench | IAR Compiller | Си/С++/Assembler | Commercial |
CoIDE | GCC compiler. | Си/С++/Assembler. | Free/Commercial |
True Studio | Precompiled GCC compiler. | Си/С++/Assembler | Free/Commercial |
Си:
z = (a << 2) | (b & 15);
ASM:
ADR r4,a ; get address for a
LDR r0,[r4] ; get value of a
MOV r0,r0,LSL#2 ; perform shift
ADR r4,b ; get address for b
LDR r1,[r4] ; get value of b
AND r1,r1,#15 ; perform AND
ORR r1,r0,r1 ; perform OR
ADR r4,z ; get address for z
STR r1,[r4] ; store value for z
Си:
if (i == 0)
{
i = i + 10;
}
ASM:
@(переменная i находится в регистре R1)
SUBS R1, R1, #0
ADDEQ R1, R1, #10
Си:
for ( i = 0 ; i < 15 ; i++)
{
j = j + j;
}
ASM:
SUB R0, R0, R0 ; i -> R0 and i = 0
start CMP R0, #15 ; is i < 15?
ADDLT R1, R1, R1 ; j = j + j
ADDLT R0, R0, #1 ; i++
BLT start
Этот раздел не завершён. |
Пример программы на языке ассемблера для микроконтроллера PIC16F628A (архитектура PIC):
LIST p=16F628A
__CONFIG 0309H
STATUS equ 0x003
TRISB equ 0x086
PORTB equ 0x006
RP0 equ 5
org 0
goto start
start:
bsf STATUS,RP0
movlw .00
movwf TRISB
bcf STATUS,RP0
led:
movlw .170
movwf PORTB
goto led
end
Этот раздел статьи ещё не написан. |
Этот раздел не завершён. |
Пример программы на языке Assembler для микроконтроллера MSP430G2231 (архитектура MSP, в среде Code Composer Studio):
.cdecls C,LIST, "msp430g2231.h"
;------------------------------------------------------------------------------
.text ; Program Start
;------------------------------------------------------------------------------
RESET mov.w #0280h,SP ; Initialize stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupP1 bis.b #001h,&P1DIR ; P1.0 output
;
Mainloop bit.b #010h,&P1IN ; P1.4 hi/low?
jc ON ; jmp--> P1.4 is set
;
OFF bic.b #001h,&P1OUT ; P1.0 = 0 / LED OFF
jmp Mainloop ;
ON bis.b #001h,&P1OUT ; P1.0 = 1 / LED ON
jmp Mainloop ;
;
;------------------------------------------------------------------------------
; Interrupt Vectors
;------------------------------------------------------------------------------
.sect ".reset" ; MSP430 RESET Vector
.short RESET ;
.end
Этот раздел не завершён. |
Программный пакет The PowerPC Software Development Toolset от IBM включает в себя ассемблер для PowerPC.
Этот раздел статьи ещё не написан. |
Макроассемблер (от греч. μάκρος — большой, обширный) — макропроцессор, базовым языком которого является язык ассемблера[2].
Процесс трансляции программы на языке ассемблера в объектный код принято называть ассемблированием. В отличие от компилирования, ассемблирование — более или менее однозначный и обратимый процесс. В языке ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время как в языках программирования высокого уровня за каждым выражением может скрываться большое количество различных инструкций. В принципе, это деление достаточно условно, поэтому иногда трансляцию ассемблерных программ также называют компиляцией.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .