язык может полностью использовать возможности компа/процессора но этими возможностями надо уметь пользоваться. в этом принципиальное отличие от языков высокого уровня.
Только на Ассемблере можно написать самую маленькую и при этом самую фукциональную программу т. к. при этом не будут использоваться никакие посреднеческие компиляторы, трансляторы, библиотеки и т. д. которые раздувают плевые программки в гагабайты. Для этого языка нет невозможного. Точнее есть ограничения возможностями процессора и только его способностями ты связан. Но программировать на нем действительно не просто и не быстро. Хотя для того кто этим занимается постоянно - он имеет наработанные фрагменты ранее написанных программ которые может применять в новых разработках при этом ускоряя написание новых программ но не утяжеляя новые программы лишним мусором и не создавая торможения при выполнении этих программ.
Так как это Тьюринг-полный язык программирования, на нем возможно реализовать абсолютно любой алгоритм. Используется, когда нужно передать команды процессору напрямую. Зачастую, с целью написания наиболее производительного кода.
Язык ограничений не имеет. На нём написать можно всё. Сейчас пишут очень мало. Большое время разработки (дорого) получается. Даже под встроенные микропроцессоры проще писать на си. Лично я в языке разочаровался, когда понял, что в уме оптимизировать под архитектуру современных процессоров просто невозможно. Слишком много факторов нужно учитывать.
Ну начнём с того, что на каждую процессорную архитектуру ассемблер свой. Ну возьмём x86-64, вы сможете писать то же самое, что и на языке высокого уровня, только эффективнее и быстрее, если вы конечно знаете все команды и расширения. Пишите под новейший процессор? - Вы сможете задействовать новые команды процессора прямо сейчас. Но опять же, сумеете ли вы оптимально написать код или же скажем в библиотеках питона найдётся более эффективная реализация. К тому же вы будете тратить на порядок больше времени на разработку, в отличии от языков высокого уровня.