Frage von Gena221, 51

Assembler aktuel?

Ja das mansche Schprachen wie D und A sind nicht so aktuel aber mansche sprachen wie COBOL, C sind sehr alt und trozdem bis heute verwendet weil sie ihre Arbeit gut tun. Assembler muss die alle älteste Programmsprache sein aber ob sie heute noch stark verwendet wird weis ich gar nicht. Kann mich einer aufklären ob Assembler heute eine gesuchte und oft verwendete Programmsprache ist ? Mir ist klar das jeder Hacker ahnung davon haben muss wegen Buffer Overflow und etc für Treiber ist Assembler auch wichtig genau so für Debugging von Programme. Aber für microcontroller nimmt man eher C als Assembler aber manschmal muss man Assembler nehmen. Steht den Assembler überhaupt in der Lehrplan der Studenten ? (Informatik Studium) und noch eine Frage wenn einer sich entscheidet Assembler zu lernen soll man dann alle Assemblern lernen ? Oder kann man immer im Beruf nachgucken bezuglich syntax und Befehlen ? Gibt es in der Deutsche Sprache gute Literatur darüber ?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von sarahj, 31

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
von Nube4618, 34

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
von anion, 9

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
von kordely, 31

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

Antwort
von Rango87, 51

"Aber für microcontroller nimmt man eher C als Assemble"

Aber sonst bist du gesund oder?

Kommentar von TeeTier ,

Würdest du das bitte mal etwas weiter ausführen? Was für ein Problem hast du denn mit dieser Aussage des Fragestellers? So wie ich das sehe, stimmt das doch!

Kommentar von anion ,

naja mikrocontroller sind ja unprogrammierbare integrierte schaltkreise oder bestenfalls im weiteren sinne controller, die man mit ganz primitiven befehlen steuern kann. das hat halt nichts mit c zu tun in diesem sinn, ist nur von rango87 unpassend formuliert worden.

Keine passende Antwort gefunden?

Fragen Sie die Community