Мы все изучаем высокоуровневые языки программирования, но глубокие знания того, что происходит под капотом, позволяют специалисту принимать более взвешенные технические решения, а значит, иметь больший авторитет среди коллег и карьерные перспективы.
Современные языки высокого уровня (такие, как python, JavaScript, C#) в ходе своего развития стремятся приблизится к естественным языкам (в подавляющем большинстве случаев, английскому). В их синтаксисе появляются более абстрактные конструкции (классы, объекты, замыкания).
Однако у процессора и электроники, которые должны исполнять наши программы, нет таких абстрактных и высокоуровневых понятий как «классы» и «объекты» и т.д. Зато, есть понятия «байт», «бит», «память». Задачей таких программ как компиляторы и интерпретаторы является перевод программ на высокоуровневом языке в язык, который понимает электроника
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/8d04eaff599a583957f6e9f773f39d89.png)
Какими бы ни были разными языки, в конечном итоге программы на них переводится в один и тот же язык команд процессора, на котором эти программы исполняются (иногда это делается в несколько этапов в случае C# и Java).
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/b04eafcefc2b5bdd651e93bd67ccd571.png)
Процессоры бывают разных фирм, моделей и архитектур и у каждого из них свой язык команд (каждый производитель процессоров во что горазд). Чтобы программа на каком-либо высокоуровневом языке исполнялась на определённом процессоре, надо перевести её в язык именно того процессора, на котором она будет исполняться. Таким образом, для одного и того же языка может существовать несколько компиляторов, переводящих программу на этом языке в языки команд разных процессоров
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/2f9d0d9bd3e44e150a90eca7d55c83e9.png)
Язык программирования, который наиболее близок к языку команд процессора – язык Ассемблера. (Ассемблер – это не язык сам по себе, это программа, переводящая инструкции языка Ассемблера в язык машинных команд).
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/796077dc215340be7d4c4c5a90aed53e.png)
Каждый оператор языка ассемблера соответствует одной машинной команде процессора:
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/129ffb95f5d238037e2f36ba75884a10.png)
Тогда как каждому оператору высокоуровневого языка (языка, синтаксис которого стремится к естественным языкам больше, чем к искусственным, например, python) может соответствовать достаточно большое количество машинных команд.
![Как в действительности исполняются наши программы? (Ассемблер и его друзья)](https://media.proglib.io/posts/2019/12/04/72bb655558d7ec8ac9a77348c733724c.png)
Читайте мою книгу «Ассемблер на пальцах», в которой я подробно и наглядно разбираю основные концепции языка ассемблера и принципы работы процессора Intel x86 в реальном режиме работы.
Комментарии