Vieles kann man in Assembler auch gut lernen indem man versucht fremden Code zu verstehen. Dazu würden sich z.B. die Application notes von Atmel anbieten oder halt das was ein Compiler ausgibt.
Ansonsten: lerning by doing.

Ein C Compliler hat schon Vorteile, aber gerade bei typischen Controlleraufgabe kann man auch ohne viel Übung besser optimieren als der Compiler. Wenn es um komplizierterAlgorythemen und viel Arytmetik mit langen Zahlen geht ist der Compiler etwas im Vorteil. Gerade wenn es um schnell Reaktion auf Interrupts geht sind die C Compiler deutlich langsamer. Von hand kann man einfach mehr daten immer in den Registern halten.
Wenn man den Inline Assembler braucht, muß dann doch assebler können.

Was man durch das programmieren in Assembler gut lernt ist es vor dem eigentlichen programmieren das ganze gut zu planen und nicht wild drauflos zu schreiben. Da hilft dann auch für bessere Programme in C oder Basic.