Asembler
Z Wikipedii
Asembler - pojęcie związane z programowaniem i tworzeniem kodu maszynowego dla procesorów. W języku polskim pojęcia tego używa się zarówno dla niskopoziomowych języków programowania bazujących na bezpośrednich operacjach procesora (zwanych czasami językami asemblerów - ang. assembly languages), jak i dla programów tworzących kod maszynowy na podstawie kodu źródłowego w tym języku.
Spis treści |
[edytuj] Asembler jako język programowania
Asemblery lub języki asemblerów to w informatyce rodzina języków programowania niskiego poziomu, w których zasadniczo jedno polecenie odpowiada jednemu rozkazowi procesora. Są to języki powstałe na bazie języka maszynowego, poprzez zastąpienie liczb odpowiadających fragmentom rozkazów kodu maszynowego ich symbolicznymi odpowiednikami. Dzięki zamianie liczb na tzw. mnemoniki, możliwe jest tworzenie programów, których kod źródłowy może być zrozumiały dla człowieka, a jednocześnie bezpośrednio tłumaczony na kod maszynowy procesora, co pozwala zapewnić duży stopień kontroli programisty nad zachowaniem procesora.
Pierwszym asemblerem był skonstruowany przez Konrada Zuse układ elektromechaniczny przygotowania taśmy perforowanej z programem dla maszyny Z4 (moduł Planfertigungsteil). Pozwalał na wprowadzanie i odczyt rozkazów i adresów w sposób zrozumiały dla człowieka.
Składnia języka asemblerowego różni się w zależności od używanego asemblera (programu tłumaczącego, patrz niżej) oraz implementacji sprzętowej - przede wszystkim od architektury procesora. Do najpopularniejszych odmian tego języka - ze względu na popularność architektury Intela znanej pod nazwą x86, zaliczyć można Asembler x86.
Współcześnie praktycznie nie używa się asemblera do pisania całych programów dla komputerów osobistych. Jest on wciąż używany jedynie do pisania fragmentów wymagających bardzo wysokiej wydajności lub mających inne specjalne wymagania, np. dla oprogramowania mikrokontrolerów o niewielkich rozmiarach pamięci programu lub istotnych, niewielkich fragmentów systemów operacyjnych.
Przykładowe polecenia (mnemoniki) w języku Asembler x86:
mov ax, $D625 ;wprowadź do rejestru AX liczbę szesnastkową 0D625 (54821 dziesiętnie) mov es, ax ;załaduj rejestr segmentowy ES wartością znajdującą się w AX (0D625) mov al, 24 ;załaduj dolną (młodszą) połówkę rejestru AX (AL) liczbą dziesiętną 24 mov ah, 0 ;wyzeruj górną (starszą) połówkę rejestru AX (AH) int 21h ;wywołaj przerwanie 21H
[edytuj] Asembler jako program
Asemblerem (ang. assembler) nazywa się również program dokonujący asemblacji, czyli tłumaczenia zapisu symbolicznego na język maszynowy (odpowiednik kompilacji języków wyższych poziomów). Do najpopularniejszych asemblerów zalicza się NASM, TASM oraz MASM. Istnieją też na przykład FASM i GASM.
Rozszerzeniem asemblera z zachowaniem wszystkich jego możliwości jest makroasembler.
[edytuj] Przykładowy program
Program tworzony w innych językach programowania niż asembler jest zwykle kompilowany do asemblera, a potem zamieniany na kod binarny przez asembler.
Przykładowy program wypisujący na standardowym wyjściu słowa Witaj świecie (kodowanie w UTF-8) w języku C:
#include <stdio.h> #include <stdlib.h> int main() { printf("Witaj świecie\n"); exit(0); }
po kompilacji przez gcc na procesor x86 zostaje "przetłumaczony" na Asembler:
.file "main.c" .section .rodata .LC0: .string "Witaj \305\233wiecie" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $4, %esp movl $.LC0, (%esp) call puts movl $0, (%esp) call exit .size main, .-main .ident "GCC: (GNU) 4.1.2 20060901 (prerelease) (Debian 4.1.1-13)" .section .note.GNU-stack,"",@progbits
Kod Asemblera oprócz listy mnemonicznych poleceń zawiera sekcje opisujące parametry pliku binarnego, takie jak np. łańcuch znaków "Witaj \305\233wiecie".
[edytuj] Problemy terminologiczne
Nazwa Assembler (wielką literą i z dwoma 's') zachowywana jest w języku polskim w przypadkach, gdy chodzi nazwy programów lub poleceń w ich dosłownym brzmieniu, czyli nazwy własne, natomiast małą literą i z jednym 's' używa się spolszczonego wyrazu oznaczającego ogólnie oprogramowanie lub dowolny program tej kategorii.
[edytuj] Zobacz też
[edytuj] Linki zewnętrzne
- Programowanie niskopoziomowe (materiały dydaktyczne MIMUW na studia informatyczne I stopnia)
ABAP • Ada • AWK • Asembler • C • C++ • C# • COBOL • D • Forth • Fortran • Icon • Java • JavaScript • Lisp • Modula 2 • Oberon • Object Pascal • Objective-C • Pascal • Perl • PHP • PL/SQL • Python • REXX • Ruby • sh • Smalltalk • Snobol • SQL • Visual Basic • VB.NET
Akademickie
Comal • Eiffel • Haskell • Logo • MCPL • ML • Nemerle • Prolog • Scheme
Historyczne
ALGOL • APL • BASIC • Clipper • MUMPS • PLAN • PL/I • PL/M • SAS • Simula