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)