Depinde de caz si de domeniul in care lucrezi. In general te bagi in assembly cand te lovesti de bariere in limbajele compilate in assembly, si presupun ca asta ar trebui sa se intample cel mai des pentru cei ce lucreaza in medii embedded. Cand rezultatul compilarii C-ului nu corespunde, faci treaba manual pentru el. Sau daca ai ceva caz mai exotic, who knows. Se intampla mega rar.
Un alt uz este pentru a intelege cum se compileaza un anumit algoritm, de exemplu cand vrei neaparat sa stii daca doi algoritmi diferiti sunt optimizati similar la generarea assembly-ului.
Este util evident daca lucrezi la compilatoare.
Este de asemenea util daca scrii sisteme de operare, dar e mentionabil faptul ca poti rapid sa treci inapoi pe C imediat ce ai scris cateva rutine basic pentru boot (might remember this wrong).
Iti este util sa intelegi conceptele de baza a functionarii unui CPU, pentru ca daca nu esti curios e pointless sa inveti pe indelete un anumit assembly language. Sunt multe limbaje assembly, probabil cel mai popular acum este cel pentru ARM, datorita telefoanelor mobile si device-urilor embedded. Daca scrii .NET, te bagi in MSIL, de exemplu, "un fel de assembly".
Sunt rare cazurile in care e nevoie de assembly work, si si alea sunt in anumite cercuri de devs.