Diskussion:Assembler (Informatik)

aus Wikipedia, der freien Enzyklopädie

Ein Assembler ist KEIN Compiler:

Für jeden Computertyp gibt es spezielle, auf den Befehlsvorrat des Computers zugeschnittene Assemblersprache. Der Prozess der 1:1 Übersetzung dieser Assemblersprache in die Maschinensprache heißt Assemblieren.

Ein Compiler erzeugt aus einem Quellprogramm, das in einer Quellsprache geschrieben ist, ein Zielprogramm in einer Zielsprache.

Der Compiler bezieht sich also auf Eine Hochsprache wie z.B. C++, Java oder Pascal etc. und kann auf diverse Prozessoren abgebildet werden. Ein Assembler führt eine 1:1 Transformation aus einer symbolischen, prozessorspezifischen Sprache in Maschinencode durch.

Bin ich der einzige dem es auffällt? "die eine Hochsprache wie z.B. Java, C oder Pascal in Maschinensprache übersetzen" - wenn man sich den Sazt durchliest, dann könnte man denken, dass Java genauso kompiliert werden würde wie C oder ähnliches. Aber Java wird doch als Bytecode kompiliert und da ist der vergleich zu Maschinencode nicht gerade treffend. -- JackthHero 21:58, 22. Jun 2005 (CEST)
Der Java-Bytecode ist der Maschinencode der Java-VM. Das braucht man nicht großartig zu vergleichen, da es im Prinzip das gleiche ist. :) --217.7.68.91 14:58, 25. Jul. 2007 (CEST)
Die Formulierung mit Link auf Compiler ist schon recht, weil der Inhalt des Artikels das richtige trifft, nur ist hier das Wort Compiler irreführend - deswegen schreib ich "Übersetzer" rein --SonniWP2 22:48, 30. Jul. 2007 (CEST)

Verständnis

Dieser Artikel ist relativ schwer Verständlich, ich würde mal behaupten dass der Laie überhaupt nichts verstehen würde!

Beispiel: Die einfachste Version eines Assemblers, kombiniert mit der Möglichkeit, Programme interaktiv zu testen und zu analysieren, wird Maschinensprachemonitor genannt. Makroassembler gestatten die Bildung von parametrisierbaren Befehlsgruppen. Eine Makroanweisung wird im allgemeinen in mehr als einen Maschinenbefehl umgesetzt.

Ist ein Makroassembler ein Maschinensprachenmonitor? Wenn ja: Warum hat das dann zwei Namen? Wenn nein: Warum steht dann da nicht "Makroassembler hingegen..." oder "Makroassembler bieten darüber hinaus..."

Was sind parameterisierbare Befehlsgruppen?

--High-Fish 07:09, 8. Dez 2005 (CET)

Mit dem EchzeitMonitor guckst du dir dein RunningCode an.
Makros Includes du in Assemblerquelltext.
In deinen oder meinen Makros steht dann, z.B in reinem Assemblercode die Eröffnung von Funktionen z.B unter DirektX7 Tastatur oder Mouse A)Initalisierungfunktion. B)Probe- oder Testfunktion oder FunktionFunktion. C) Das Ende einer Funktion mit schliessen der Handles usw usf.
Makros benutzt man hauptsaächlich in grösseren Projekten z.B bei relativ komplexen Sprachen (Assembler) zur Vereinfachung.
Weil man dann im QuellText eine nur die Makrofunktion mit kurzem Befehlsnahmen aufruft. Open() Test() Close()...
Der Assembler ist ein Makrointerpreter der dann erst die Makronahmen durch den entsprechenden ASM-Code ersetzt & interpretiert.
Dann wird anschlisend aus dem ASM Source ein ausführbahrer Code gemacht.
Ich habe schon grössere ASM-Projekte im Hintergrund gemacht und muss es wissen.
Alle grossen Progger wissen was Makros sind. Nein, Makros stammen nicht von Mikrosoft.
(nicht signierter Beitrag von 89.56.230.218 (Diskussion) 18:12, 27. Sep. 2008)

Abgrenzung zu Compilern

[...] Assembler sind häufig extrem einfach aufgebaut und daher meist auch sehr schnell. Compiler hingegen übersetzen oft zunächst das Programm in eine Zwischensprache, die dann an einen Assembler weitergeleitet und in das letztlich benötigte Maschinenprogramm umgewandelt wird. Bei modernen Compilern erfolgt dieser Schritt implizit. [...]

So kann man das eigentlich nicht stehen lassen... Es fehlt hier der Hinweis auf den ein- oder zwei- Pass Assembler. Wie wird denn bei der Übersetzung die relative Addressierung errechnet, besonders wenn Macros enthalten sind? Um diese Offsetangaben korrekt zu erstellen und eine korrekte Namensauflösung für das "Linkage" zu ermöglichen, ist oft ein zweiter Durchlauf von nöten.

Welche "moderne Compiler" können denn direkt Maschinencode erzeugen? (nicht signierter Beitrag von 80.137.213.201 (Diskussion) 10:42, 18. Mär. 2006)

GNU Assembler: CPU-unanhängig

"Es gibt jedoch Assemblerfamilien, welche bei gleich bleibender Makrosprache und Arbeitsumgebung mehrere Prozessoren unterstützen (z. B. GNU Assembler)."

Die Aussage verstehe ich nicht ganz. Die Syntax (AT&T-Syntax genannt), die bleibt gleich. Aber die opcodes und Architekturen etc. sind doch andere. Bitte um Aufklärung. Hat der Autor schonmal gas benutzt? --Greenhybrid 15:43, 10. Jul. 2007 (CEST)

Satz komplett entfernt. Die Aussage, dass der gas (==GNU Assembler) cpu-unabhängig ist, ist einfach falsch. Da nun ein Beispiel für einen solchen CPU-unabhängigen Assembler fehlt (selbst High Level Assembler verlangen i.d.R. nach spezifischen Registernamen und Befehlsnamen ), habe ich den Satz komplett entfernt.

--Greenhybrid 12:02, 29. Aug. 2007 (CEST)

Linkänderung

Link runtime-basic.net wurde in runtimebasic.net geändert da dieser aufgrund eines admin. Fehlers von Domain Parking Manager (Above.com) "übernommen" und nicht zurückgegeben wurde.

-- Runtimebasic 22:58, 31. Jul. 2011 (CEST)

Zu "Abgrenzung zu Hochsprachencompilern" - Abbildung von Hochsprachen ist prinzipbedingt injektiv, während ein Assembler bijektiv sein kann

Was man in diesem Abschnitt vielleicht noch erwähnen sollte ist die Tatsache, dass Hochsprachen die Möglichkeiten einer CPU prinzipbedingt nicht vollständig abbilden können, da man es nur mit einer Abstraktion einer Teilmenge zu tun hat. Das führt dazu, dass man in Assembler, sofern der Assembler den vollen Befehlssatz der CPU unterstützt, Dinge umsetzen kann, die man in einer Hochsprache so nur über Umwege umsetzen kann, da es der Hochsprache aufgrund der Notwendigkeit auf vielen verschiedenen Computerarchitekturen funktionieren zu müssen, an Ausdrucksfähigkeit für eine spezifische CPU Architektur fehlt.
So ist in C bspw. das Byte der kleinste Datentyp. Will man also einzelne Bits eines Wertes verändern, dann geht das in C nur über Tricks wie Shift Operatoren oder die Verknüpfung mit anderen Werten durch logische Operatoren wie bspw. XOR oder AND. Demgegenüber kann es aber CPU Architekturen geben, die Opcodes haben, mit denen man einzelne Bits in einem Byte auch direkt ändern kann. Ein dafür geschriebener Assembler könnte diese Möglichkeit zur Verfügung stellen, die Hochsprache C kann das aus den oben beschriebenen Gründen so direkt nicht. --IT-Compiler (Diskussion) 03:41, 7. Apr. 2022 (CEST)