Was ist Assembler ?

12 Antworten

Ein Assembler ist ein Übersetzer für Programmcode, der sich aus Maschinenbefehlen zusammensetzt. Diese Befehle können sich je nach
verwendeten Prozessor stark unterscheiden.

In der Art der verwendeten Befehle besteht der wesentliche Unterschied zu allen anderen Programmiersprachen. Während sich Befehle bei den Hochsprachen in der Übersetzung aus mehreren Anweisungen im endgültigen Code zusammensetzen, wird der Assemblerbefehl durch den Assembler lediglich in die entsprechende Binärform übersetzt. Weiterhin ersetzt der Assembler Variablen durch die entsprechenden Speicheradressen.

Zitat aus http://assembler.hpfsc.de/

Man schreibt also keine Nullen und Einsen, sondern nutzt eine Befehlssyntax. Der Assembler übersetzt dann die Befehle auf direktem Weg in Nullen und Einsen (mal vereinfacht ausgedrückt), also in direkte Anweisungen für den Prozessor. Man spricht deshalb von hardwarenaher Programmierung (im Gegensatz zu Hochsprachen).

Hier gibt es ein Online-Buch für Anfänger:

https://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren

und hier ein PDF:

http://avr-asm-download.de/beginner_de.pdf

Du findest im Netz noch viele weitere Informationen, ggf. solltest Du Dir auch ein gutes Anfänger-Buch kaufen, vielleicht gibt es eine gute Buchhandlung in Deiner Nähe, die entspr. Literatur anbietet.

Auch wenn ich dir deine Fragen zur Genüge beantworten könnte, tue ich das jetzt aus Zeitmangel nicht. Außerdem haben dir die anderen schon genügend geschrieben (mit dem ich teilweise aber nicht einverstanden bin ... aber egal).

Nur so viel: Ich spüre, dass du gaaaanz kurz vorm Durchbruch bist! Jetzt bloß nicht aufgeben!

Halte dich einfach an die Tutorials auf der offiziellen NASM Website, und häng dich bei jedem auftretenden Problem rein, bis es läuft.

Ich weiß noch, wie das früher bei mir war ... ich habe auch ewig gebraucht, bis "Hello World" lief (das war so 1990), aber dann kam der Aha-Effekt und die Erfolge sprudelten nur so.

Gerade bei Assembler wirst du als Anfänger ganz am Anfang nicht alles verstehen können ... das ist aber egal, solange du einfach weiter machst. Irgendwann macht es dann schon "Klick".

Wenn erst einmal dein "Hello World" läuft, kannst du ja auch mal viele andere Assembler-Dialekte ausprobieren (v. a. x86-64 o. ARM), dich in eine andere Syntax einarbeiten (Intel vs. AT&T), verschiedene Assembler benutzen (NASM, MASM, GAS, HLA, o. sogar TASM, etc.) und die Interfaces wechseln (Interrupts & Syscalls o. Libc-puts).

Ich garantiere dir, dass wenn du JETZT aufgibst, wirklich etwas großes verpassen wirst! Sei dir dessen bewusst.

Assembler ist über all die Jahre hinweg eine meiner Lieblings-Sprachen (wenn man das überhaupt als Sprache bezeichnen will). Das, was damit möglich ist, bekommst du in keiner anderen Programmiersprache hin, auch wenn Aufwand und die investierte Zeit oft überproportional sind.

Relativ kurze Zeit, nachdem du dich eingefummelt hast, wirst du mit Assembler schon grafische Oberflächen und Netzwerksachen programmieren können, wobei die resultierende EXE (oder ELF) Datei deutlich kleiner als 1KB ist (im Schnitt 500 bis 700 Byte, z. B. für eine Webcam-Software mit Bildupload über FTP).

An der Stelle, an der du dich jetzt gerade befindest, trennt sich das erste mal die Spreu vom Weizen. Also mach weiter! "Hello World" wirst du auf jeden Fall hinbekommen!

Viel Erfolg! :)

Vielen dank! Ich habe es mittlerweile in der VM geschafft "Hello World" oder andere Texte auszugeben.

1

Assembler ist ein maschinenorientierte Programmiersprache. Das bedeutet, für jede CPU gibt es einen eigenen.

Im Prinzip werden ja Maschinenbefehle durch Bytes dargestellt. Um das Programmieren anschaulicher zu gestalten, hat man nun diesen Bytes mnemotechnisch Abkürzungen zugeordnet. JPM (von 'jump') bedeutet z.B. 'springe zu' (einer folgenden Adresse).

Man konnte damit links einen Programmablaufplan erstellen und rechts daneben den entsprechenden Code schreiben.

ist dann da immer die Syntax komplett anders oder was?

Im Prinzip ja, da es vom Befehlsumfang der CPU abhängt.

sondern irgendein normales, wirres .exe-Gedöns: "ê| ú¸ ŽÐ¼ û¸ ŽÀŽØˆ)|è) ¸ ŽÀŽØê"

Das reassemblieren von Assembler-Programmen ist etwas schwierig. Erst einmal musst du ein Programm haben, das zu deiner Maschine passt. Zweitens besteht ein Programm nicht nur aus Programmcode, sondern auch aus Daten. Die Maschine kann aber gar nicht unterscheiden, was Code ist und was Daten sind. Wenn du wirklich eine binäre Darstellung brauchst (wieso eigentlich?) dann benötigst du ein Monitorprogramm.

Wiederum nicht dass ganze Gejammer dass Assembler eine schwere Sprache ist und und und.

Assembler ist keine schwere Sprache. Du beginnst halt nur bei Null (wobei ich wirklich Null meine) und musst dir meist ganze Bibliotheken erarbeiten (oder zur Verfügung gestellt bekommen) um die Arbeit tun zu können, die das Betriebssystem erledigt.

Man kann auch nicht in Assembler geschriebene Programme einfach ablaufen lassen (außer man hat einen Interpreter), sondern muss sie erst in Maschinensprache umwandeln (assemblieren). Auch das Verlinken muss extra geschehen.

Was möchtest Du wissen?