| FAQ der Newsgroup de.comp.lang.assembler (d.c.l.a.) | |
|
Was ist Assembler? Unter Assembler werden zwei Dinge verstanden. Ein Assembler ist zunächst ein Compiler, der ein in Assemblersprache geschriebenes Skript in ein Format umwandelt, das ein Linker sofort zu einem ausführbaren Programm verarbeiten kann. Die Assemblersprache ist dabei vorrangig eine Folge von prozessornahen Befehlen, den sogenannten mnemonics oder opcodes. Diese Befehle können ohne weitere Umformungen zu Maschinenbefehlen umgeformt werden, also zu Bitfolgen, die der Prozessor verstehen kann. Die Assemblersprache unterscheidet sich von einer sogenannten Hochsprache darin, dass sie sich am Prozessor orientiert, während die Hochsprache sich am Programmierer orientiert. Moderne Assembler haben aber eine Fülle von zusätzlichen Optionen, um das Schreiben eines Programms in Assemblersprache erträglich zu machen. Gebräuchliche Assembler sind MASM oder ML(Microsoft Assembler), NASM (Netwide Assembler), GoAsm (Assembler der Go-Tools), TASM oder BASM (Turbo oder Borland Assembler), YASM (Yet Another Assembler) und GAS oder AS (GNU Assembler). Assembler ist aber auch die umgangssprachliche Bezeichnung für die Assemblersprache. Man benutzt also "einen Assembler" und programmiert "in Assembler". Da die Assemblersprache aber nicht normiert oder standardisiert ist, ist auch die Syntax vom verwendeten Assemblerprogramm abhängig. Der Kern richtet sich in erster Linie danach, wie der Prozessorhersteller die Befehle und Befehlsfolgen für seinen Prozessor benannt hat. Es gibt aber auch Ansätze, eine ganz eigene Syntax zu gebrauchen. Ein Beispiel: Intel-Syntax: mov eax, ebx (Lade Register eax mit dem Inhalt von Register ebx) = AT&T-Syntax: mov %ebx, %eax = GAS-Syntax: movl %ebx, %eax = Windela: move.l r0,r3 = HLA: mov( eax, ebx ); Es gibt Aussagen, mit denen kann man in einer Gruppe negativ auffallen. Die stets wiederkehrende Aussage, dass Assembler unnötig und veraltet sei, ist eine solche Aussage. Wer sich mit Assembler beschäftigt, hat seine guten Gründe dafür, und wer sich nicht mit Assembler beschäftigt, hat genauso gute Gründe. In einer Hochsprache (C++, Pascal, Basic, PHP, Python, Perl) kann man viele Dinge einfacher erledigen als in Assembler. Was in einer Hochsprache programmiert werden kann, kann auch in Assembler programmiert werden (und noch mehr), wobei man bei Assembler selbst für den Code verantwortlich ist und keinerlei Schuld auf den bösen Compiler oder Interpreter schieben kann. Zu welchem Mittel man greift, kann man sich aber nur persönlich nach Lust, Wissen und Können beantworten. Nur eines kann man mit Gewissheit sagen: Solange es Prozessoren gibt, solange wird es auch Assembler geben. Assembler wird dort eingesetzt, wo eine Hochsprache zu umständlich, zu langsam, zu ressourcenfressend oder zu diktatorisch ist. Ganze Projekte in Assembler umzusetzen, wird nur noch selten gemacht. Häufig allerdings findet man einen Mix aus Hochsprache (C, Pascal, Basic o. ä.) und Assembler. Kleines Beispiel mit Visual-C++, dem C++-Compiler von Microsoft:
#include <stdio.h>
char globalFormel[] = "a * b = c";
void main( void )
{
char lokalFormel [sizeof globalFormel];
_asm // Ohne Leerzeichen kopieren
{
mov esi, offset globalFormel
lea edi, dword ptr lokalFormel
Schleife:
lodsb
cmp al, 32
je Schleife
stosb
test al, al
jnz Schleife
}
printf ("Original:%s\nOhne Leerzeichen:%s\n",globalFormel,lokalFormel);
}
Ralph 'rkhb' Bauer Aug 2008 |