05
Дек
2019

Как в действительности исполняются наши программы? (Ассемблер и его друзья)

Понимание того, как выполняются написанные им программы отличает опытного разработчика и является маркером его профессионализма и открывает возможности его профессионального и карьерного роста. А раз так, то и мы должны в этом разобраться!

Мы все изучаем высокоуровневые языки программирования, но глубокие знания того, что происходит под капотом, позволяют специалисту принимать более взвешенные технические решения, а значит, иметь больший авторитет среди коллег и карьерные перспективы.

Современные языки высокого уровня (такие, как python, JavaScript, C#) в ходе своего развития стремятся приблизится к естественным языкам (в подавляющем большинстве случаев, английскому). В их синтаксисе появляются более абстрактные конструкции (классы, объекты, замыкания).

Однако у процессора и электроники, которые должны исполнять наши программы, нет таких абстрактных и высокоуровневых понятий как «классы» и «объекты» и т.д. Зато, есть понятия «байт», «бит», «память». Задачей таких программ как компиляторы и интерпретаторы является перевод программ на высокоуровневом языке в язык, который понимает электроника

Какими бы ни были разными языки, в конечном итоге программы на них переводится в один и тот же язык команд процессора, на котором эти программы исполняются (иногда это делается в несколько этапов в случае C# и Java).

Процессоры бывают разных фирм, моделей и архитектур и у каждого из них свой язык команд (каждый производитель процессоров во что горазд). Чтобы программа на каком-либо высокоуровневом языке исполнялась на определённом процессоре, надо перевести её в язык именно того процессора, на котором она будет исполняться. Таким образом, для одного и того же языка может существовать несколько компиляторов, переводящих программу на этом языке в языки команд разных процессоров

Язык программирования, который наиболее близок к языку команд процессора – язык Ассемблера. (Ассемблер – это не язык сам по себе, это программа, переводящая инструкции языка Ассемблера в язык машинных команд).

Каждый оператор языка ассемблера соответствует одной машинной команде процессора:

Тогда как каждому оператору высокоуровневого языка (языка, синтаксис которого стремится к естественным языкам больше, чем к искусственным, например, python) может соответствовать достаточно большое количество машинных команд.

Читайте мою книгу «Ассемблер на пальцах», в которой я подробно и наглядно разбираю основные концепции языка ассемблера и принципы работы процессора Intel x86 в реальном режиме работы.

Источник: https://proglib.io/p/kak-v-deystvitelnosti-ispolnyayutsya-nashi-programmy-assembler-i-ego-druzya-2019-12-05

Share

Тебе может это понравится...