Mastodon Nachhilfe | Nachhilfe online + Nachhilfe zu Hause : Nachhilfe-Vermittlung
...
close

Cookie-Einstellungen

Zulassen:

 

Infos/Erklärung
Gemäß Ihrem Recht auf informierte Selbstbestimmung.

Besser wissen durch Nachhilfe: Wissensfragen

Hier kannst Du eine Wissensfrage zu einem Thema stellen, das Dich interessiert.
Die Fragen und die Antworten darauf werden hier veröffentlicht und evtl. zusätzlich an interessierte Benutzer (Nachhilfelehrer/innen) weitergeleitet.

Die Fragen sollten eher allgemeiner Natur sein, z.B. : "Ich will eine chinesische Sprache lernen. Mandarin oder Kantonesisch?", oder: "Vor Klausuren bin ich immer sehr nervös und bin schnell blockiert, obwohl ich vorbereitet bin - was kann ich tun?"

Alle Fragen & Antworten werden moderiert. Unangebrachte oder unhöfliche Beiträge, Links zu anderen Webseiten o.ä. werden gelöscht. Achtung: hier gibt es keinen Kundenservice.
Dieser Service soll keinen Unterricht ersetzen.

Assembler Programmierung

Was ist Assembler? Warum programmiert kaum jemand in Assembler?
Assembler, Programmierung
Datum: 20.01.20 16:16, Benutzer 302646Antwort:
assembler ist die menschenlesbare form von den befehlen die direkt auf den prozessor laufen.

prozessoren sprechen nur in nullen und einsen. das sogennante binary (binäre). befehle und daten werden in binary eingelesen. ergebnisse in binary ausgegeben. heutige computer haben menschenfreundliche eingaben und ausgaben. die ersten computer wurden jedoch nur in binary bedient. assembler war einer der ersten werkzeuge um die nullen und einsen des binary in einer menschenfreundlichere art zu schreiben (und zu lesen).

mit assembler können wir die befehle in worten schreiben und zahlen im dezimalsystem. ein assemblerprogram übersetzt die menschenlesbare variante zurück in nullen und einsen für den prozessor zum ausführen. die übersetzung ist recht trivial. ähnlich wie ein telefonbuch: name zu nummer (binäre nummer). im kontrast dazu wird bei einer höheren programmiersprache eine anweisung in der regel zu einer ganzen reihe von assembler befehlen übersetzt.

der vorteil von assembler ist die maximale kontrolle. wenn ich fleißig und aufmerksam (und genial) bin dann kann ich programme in assembler schreiben die schneller laufen und weniger speicher verbauchen als programme die mit einer höheren programmiersprache geschrieben sind. dieser vorteil kam hauptsächlich am anfang der computer entwicklung zur geltung. prozessoren waren langsam. arbeitsspeicher war knapp. jede anweisung und jedes byte das man sparen konnte war ein gewinn.

der hauptnachteil von assembler ist die prozessor abhängigkeit. ein assembler programm welches für ein prozessortyp geschrieben ist lässt sich nicht ohne weiteres auf ein anderen prozessortyp übertragen. oft mussten wesentliche teile vom programm neu geschrieben werden. manchmal haben optimierungstricks nur auf ein prozessortyp funktioniert aber nicht auf ein anderen so das programme nicht oder nur mit einschränkungen auf andere prozessortypen lauffähig waren.

ein weiterer nachteil von assembler ist die benötigte genialität und die hohe anfälligkeit für menschliche konzentrationsfehler. assembler programme wurden oft von nur einer person geschrieben und nur von dieser verstanden. wenn dieser die firma verlassen hat hatten seine kollegen teils nur mit großer mühe änderungen einbauen können.

am rande: die ersten computerspiele wurden nicht selten von genialen assembler programmierern entwickelt die den prozessor so ausgereizt haben dass leistung möglich war die selbst der prozessorhersteller nicht erwartet hat.

vergleich mit hohe programmiersprache:

auch in assembler gibt es konzepte wie schleifen und funktionsaufrufe. jedoch muss man die selbst mit hand programmieren. z.b. ein set von zehn assembler befehlen die zusammen eine schleife realisieren. jedesmal wenn du eine schleife haben willst musst du die gleichen zehn assembler befehle wieder schreiben. in einer höheren programmiersprachen musste man dann nur "while" schreiben und der compiler macht daraus diese zehn assembler befehle. dass hat tipparbeit erspart und konzentrationsfehler vermieden. der nachteil ist man konnte diese zehn assembler befehle nicht mehr mit hand feinjustieren um doch noch die eine oder andere anweisung rauszuoptimieren.

warum heute kaum noch jemand assembler programmiert:

die technik hat sich weiter entwickelt und prozessoren wurden immer schneller und arbeitsspeicher immer günstiger. leistungshungrige spiele bzw. programme in einer höheren programmiersprache wurden konkurrenzfähig. so kamen die vorteile der höheren programmiersprachen immer mehr zur geltung und die nachteile von assembler wurden immer schwerwiegender.

lange zeit wurde assembler noch für microcontroller verwendet. z.b. in digitalen armbanduhren oder die steuerung einer mikrowelle. mit der zeit wurden sogar diese prozessoren so mächtig dass man die heute auch mit einer hohen programmiersprache programmiert.

heute existiert assembler code noch in programmen bei den sich die optimierungsarbeit noch lohnt. z.b. in den innersten schleifen von programmen für wissenschaftlichen berechnungen. bei regelmäßig milliarden von datensätzen lohnt sich die mühe mit assembler zu optimieren.
+ 2 weitere Antworten:
Datum: 14.02.19 11:14, Benutzer: 300866Assembler ist so gesehen die unterste Programmierungsschicht.
Hier wird nichts mehr mit netten Befehlen umschrieben wie "FOR-NEXT" "PRINT" usw...
Man besitzt auch keine Variablen mehr, sondern kann nur noch die Daten als Speicher unter einer Adresse ablegen und auslesen. Zusätzlich gibt es Register, die beim Computer bestimmte Reaktionen hervorrufen. Was aber auch wieder computerabhängig ist.
Somit ist Assembler für Anwendungsprogramme ungeeignet, sondern nur für den Unterbau der "höheren" Programmiersprachen und Treiber.
Es programmieren durchaus Personen in Assembler, aber eben wie gesagt, nicht mehr im Anwendungsbereich für alle Benutzer, sondern Computer-/Maschinenspezifisch.
Datum: 15.08.19 14:34, Benutzer: 1898

Hallo Anonymous,


gerne beantworte ich Deine Frage und beginne vielleicht so:


Seinerzeit Anfang der 80-er Jahre habe ich begonnen, indem ich in ASSEMBLER (... gemeint ist die Maschinenprogrammiersprache konkret durch die jeweiligen Chip~/CPU-Hersteller oder für noch komplexere - auch ältere Technik - Zentraleinheit genannt) für den ZILOG-Z80 (ZILOG war der Hersteller des 8-bit-Mikroprozessors) programmiert habe.


Parallel zu den Entwicklungen gab es noch parallele Entwicklungen von CPUs der Firmen INTEL und MOTOROLLA. Hier jeweils in ASSEMBLER zu programmieren bedeutet(e), sich jeweils mit anderen - mitunter völlig verschiedenen - ASSEMBLER-Sprachen zu beschäftigen, und das war schon damals kaum noch beherrschbar. Komfortable Entwicklungsumgebungen hatten wir damals auch nicht, so das ich die Befehlsliste dann schon auswendig aus dem Kopf hinschreiben konnte.

Nun, ich habe jahrelang am Fraunhoferinstitut sog. Kernel-Programmierung bzw. später Systemprogrammierung/Firmware-Programmierung betrieben und habe einen großteil meiner Module in Assembler geschrieben. Warum? Nun, die ASSEMBLER-Programmierung befasst sich mit der sogenannten maschinennächsten Programmierung mit dem Vorteil, das der geschriebene und dann assemblierte - später in die entsprechende Plattform gelinkte lauffähige Maschinen-Code sehr performant/schnell ablaufen kann. Der Nachteil ist das differenzierte nur für die konkrete Plattform (z.B. konkrete PC-Hardware mit konkreter CPU) Herstellen entsprechenden Programmcodes. Jede Hardware verlangt also speziell hergestellten Code.

Heute nun ist die Hardware um Potenzen schneller als damals, wo ASSEMBLER noch nicht die Ausnahme war:


Wir programmieren in der sogenannten Anwendungs-Software ausschließlich in höheren Programmiersprachen, meißtens sogenannte objektorientierte Programmiersprachen (Beispielsweise c++, JAVA, c#). Das hat den Vorteil, das so hergestellter Programmcode auf fast jeder Plattform lauffähig ist. Die sogenannten Schnittstellen zu konkreter Hardware wird i.d.R. durch die CPU-Hersteller als sogenannte APIs mit entsprechenden Bibliotheken zur Verfügung gestellt. Diese durch die jeweiligen Hersteller bereitgestellten (Software)Module werden für laufzeitkritischen Code immer noch in ASSEMBLER geschrieben bzw. wenn Laufzeit nicht so priorisiert ist, auch in der sogenannten maschinennahen Programmiersprache C.


Ich denke, das ich für das Verständnis der nachgefragten Problematik Hinreichendes geschrieben habe.

Für differenzierte Fragestellungen stehe ich (fast) jederzeit zur Verfügung. (... natürlich nicht, wenn ich mich auf Konkretes im Programmieren konzentrieren muss :-) )


Viele Grüße aus Paderborn - nahe dem Siemens-Nixdorff-Formum, da wo die antiken Computer wohnen
M. N.


PD Dipl.-Ing. (FH)

Aktion: ANTWORTEN
 
Weitere Fragen: 176









Merkzettel ()