Assembler aktuel?

... komplette Frage anzeigen

4 Antworten

Assembler ist eigentlich gar keine "richtige Programmiersprache", sondern lediglich eine eins-zu-eins Befehlsnotation der darunter liegenden Maschinenbefehle. Darin zu programmieren hat einige Nachteile:

- sehr CPU abhängig; das Programm muss für jeden CPU-Typ (ARM, x86, 86-64, Mips, 68k, 6809) neu erstellt werden (ARM, Mips, 68k und insbes. 6809 sind in u-Controllern verbreitet).
- sehr teuer in der Entwicklung (man geht von einer relativ konstanten Prduktivität von Entwicklern in lines-of-code / day aus. Da sieht es bei Assembler eher schlechter aus.
- bei modernen CPUs ist es gar nicht mehr so leicht, schnelle Programme zu schreiben (wissen über Internas der CPU, Datenpfade, stalls, caches etc.)

Dennoch wird es benötigt, um z.B. bestimmte Treiberteile, Interruptservice-, Low-Level und Setup Routinen zu schreiben.
Außerdem können - mit entsprechendem Aufwand - zeitkritische Teile (z.B. Audio/Video de/codierung, kryptographische Algos, Bildverarbeitung, mathem. Berechnungen teilweise spektakulär schneller in Assembler implementiert werden.

C hingegen kann man als "maschinenunabhängigen" Assembler betrachten: es ist komfortabel genug um komplexere Programme zu schreiben, und lässt sich dennoch in sehr effizienten Maschinencode übersetzen. Außerdem kann man in C auf Speicher etc. frei zugreifen.

Wissen um Assembler und Maschinenbefehle ist unbedingt notwendig wenn man selbst Compiler entwickelt, oder sinnvoll, wenn man zeitkritische Teile des Programms optimieren möchte.
Hier gilt aber - wie fast immer - die 80/20 (oder gar 90/10) Regel:
"80% der CPU-Zeit wird in 20% des Programms verbraten".
Man entwickelt also typischerweise zuerst in einer höheren Programmiersprache, macht dann Messungen (profiling) um die Zeitkritischen Teile zu finden, und optimiert diese dann (eventuell mit Assemblerteilen).

Aber selbst letzteres wird weniger und weniger benötigt, da moderne Compiler immer besser werden, zB. indem sie "__builtin_XXX" Operationen anbieten, oder Schleifen erkennen und effiziente Vectoroperationen generieren.

Fazit:
es ist sinnvoll und wichtig, zu wissen was "unten abgeht".
Und wer einen Compiler oder Jitter schreibt, muss es wissen.

Allerdings sollte man zunächst über fundiertes Wissen um Datenstrukturen und insbes. Algorithmen besitzen, und nicht mit "premature optimizations" beginnen.

Denn schließlich gilt: selbst ein in interpretiertem, langsamen Basic geschriebener Quicksort sticht ab einer bestimmten Größe den schnellsten in Assembler geschriebenen Bubblesort.

PS:
Übrigens werden auch u-Controller (z.B. im Automobilbereich, Steuerungen etc. heutzutage vornehmlich in C programmiert)

Antwort bewerten Vielen Dank für Deine Bewertung

Heutzutage wird Assember sehr viel weniger benutzt als früher. Das liegt einerseits daran, dass die gängigen Compiler hochoptimierten Maschinencode erzeugen, sodass eine Codierung in Assembler gar nicht viel bringt, und andererseits Hardware sehr viel billiger ist als früher, man also genug Speicher zur verfügung hat. 

Die meisten Programme für Consumerprodukte und Treiber werden deshalb in Hochsprachen wie C++, Java, Delphi etc geschrieben. Meist besteht die Möglichkeit, in der Hochsprache sog. Inline-Code zu schreiben, also in die Hochsprache eingebettete Funktionen in Assembler. So kann man besonders zeitkritische Abläufe optimieren, ohne auf die Hochsprache verzichten zu müssen. 

Obwohl die Assemblercodierung bei den verschiedenen CPU's und Microcontrollern sehr ähnlich aussieht, erfordert es schon einigen Aufwand, sich hier einzuarbeiten. Beispiele findet man am einfachsten im Internet, und ein must sind natürlich die Datenblätter der jeweiligen CPU. Die Prozessor-Beschreibung für einen AT328 (Arduino Microcontroller) umfasst ca. 500 Seiten. 

An den Hochschulen wird Assembler je nach Fachrichtung gewichtet. Wer sich auf Systemprogrammierung und Compilerbau spezialisieren will, wird sich im Studium sicher intensiver damit auseinandersetzen als jemand der Wirtschaftsinformatik gewählt hat. 

Antwort bewerten Vielen Dank für Deine Bewertung

Assembler wird heutzutage meitens nur beispielhaft im Informatikstudium behandelt, nicht als ausführlichstes Thema. Werden normale Anwendungen heute in Assembler programmiert? nein. Gar nicht. Man braucht Assembler nur an manchen Stellen für Treiber und in der Betriessystementwicklung, aber der durchschnittliche Informatiker kommt bei der Arbeit mit Assembler nicht in Berührung. Wenn du richtig gut Assembler beherrschst, kannst du damit trotzdem richtig viel Geld verdienen, weil es viele Unternehmen gibt, die alte Assembler Programme von früher haben und keiner kann die warten oder gar weiter entwickeln, weil kaum einer heutzutage das know-how dafür hat.

Antwort bewerten Vielen Dank für Deine Bewertung

Assemler Sprachen ähneln an einander, aber es gibt auch Entschiede. So muss man manchmal nachgucken.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?