Für mich eine blöde Umfrage, da ich beides zu schätzen weiß.
In der Regel kodiere ich Programme in C, da es einfach unbestechlich viele Vorteile hat.
Ich benutze die avr-gcc-binutils, dessen Assembler man auch dazu überreden kann, aus einem selbstgeschrieben Assemblerprogramm Objektkode zu erzeugen.
So kann ich im letzen Schritt, dem Linken der Objektdateien, auch meine in Assemblersprache geschriebenen Programm hinzulinken lassen.
So fahre ich sehr oft zweigleisig; besonders hardwarenahe oder getrickste Sachen kodiere ich in Maschinensprache, während der Rest, der möglichst generisch aufgebaut wird, in C kodiert ist. So erreiche ich, dass ich sehr schnell programmieren kann und mir um diverse Sachen keinen Kopf machen muss (Rechenroutinen, Stack etc.) und dennoch in bestimmten Teilen selber bestimmen kann, was exakt die CPU machen soll.
Dabei muss man natürlich drauf achten, dass das Assemblerprogramm dem C-Kompilierer nicht die Grundlage klaut, indem es z.B. bestimmte Register vollsabbert oder den Stackpointer ändert...
Da ich auch viel unter Unix programmiere ist C gradezu perfekt und recht abstrakt, wenn auch dennoch sehr hardwarenah, wenn man bedenkt, dass es eigentlich nur eine relativ abstrakte und architekturunabhängige Assemblersprache ist. Wer wirkliche Abstraktion und Luxus haben will nimmt C++.
Fazit:
Assembler lernen, um die zugrundeliegende Architektur zu erforschen und zu verstehen und um compilergenerierten Kode lesen / optimieren zu können; C lernen, um portabel und effizient und übersichtlich kodieren zu können.
Achja, der avr-gcc ist alles andere als stuhr, er erlaubt viele Einstellungen bzw. Optimierungsstufen!
_________________