Почему программы на ассемблере работают быстрее?
Любое преобразование языка высокого уровня в машинный код приводит к издержкам. Ассемблер работает быстрее, потому что программист не пишет ничего лишнего, а чтобы обеспечить универсальность применения языковых конструкций, все машинные коды, созданные трансляторами, избыточны.
НЕ ВСЕГДА !!
все зависит от качества написанного кода, т.е. умений погромиста. как в принципе и в любом языке.
ассемблер прост наиболее близок к двоичному исполняемому коду, который непосредственно исполняется в процессоре.
соотвественно есть огромная куча возможностей как сделать сделать идеально подходящий к данному процессору код и соответственно самый быстрый. ты разговариваешь с процом практически на его языке.
но, вполне естественно, вариантов сделать гавно тоже больше чем в любом ином языке, что требует огромных познаний.
компилятор более высокого чем ассемблер языка выбирает для некоторого выражения на языке высокого уровня подходящий набор команд процессора и вставляет в конечный исполняемый файл. и этот подбор может быть не всегда идеальный.
плюс программист, в силу более вариативного обзора всей программы, может применить нестандартные решения, называемые в народе "хак", которые в данном месте сработают быстрее или с меньшим потреблением ресурсов.