Языки высокого уровня ограничены компилятором и используемыми библиотеками. Такие современные языки, как Java и C# вообще не позволяют работать с аппаратными ресурсами и операционной системой напрямую.
Оптимизация программ по скорости выполнения.
Современные компиляторы хорошо оптимизируют код, поэтому писать на ассемблере все программы не имеет смысла. Однако, если необходимо написать программу для шифрования или архивации больших файлов, то применение ассемблера позволит в несколько раз увеличить скорость ее выполнения. Причем достаточно реализовать на ассемблере небольшой критически важный участок программы, который производит вычисления или сложные преобразования, а интерфейс может быть написан на языке высокого уровня.
Оптимизация программ по размеру кода.
Программа на ассемблере, как правило, значительно меньше аналогичной программы на другом языке программирования. Для современных персональных компьютеров и серверов с терабайтными дисками и гигабайтами памяти это не важно. Но для микроконтроллеров, где всего несколько килобайт памяти, маленький размер программы очень важен. Чем меньше программа, тем меньше памяти требуется и тем проще и дешевле будет используемая микросхема.