Найти в Дзене
IT Еxtra

Как работает компьютер? Часть 60. Процесс сборки: от текста к машинному коду

Предыдущий урок: Как работает компьютер? Часть 59. Регистры процессора — быстрая память под рукой Мы уже научились писать простые команды на ассемблере, используя мнемоники и регистры. Но как наш понятный человеку текст превращается в ту самую последовательность нулей и единиц, которую способен исполнить процессор? Этот волшебный процесс называется сборка, и за него отвечает специальная программа — ассемблер. Давайте разберемся, как он работает, шаг за шагом. Вы создаете файл с расширением .asm, например, program.asm, и пишете в нем свой код. Этот файл — всего лишь обычный текстовый документ. Для процессора он не имеет никакого смысла. Его нужно перевести на машинный язык. Этим и занимается ассемблер. 1) Ассемблер читает исходный текст
Программа-ассемблер открывает ваш файл program.asm и начинает построчно его анализировать. Она ищет известные ей мнемоники (MOV, ADD, MUL), имена регистров (R1, R2) и числа. 2) Трансляция мнемоник в машинные коды
Для каждой встреченной строки ассемблер

Предыдущий урок: Как работает компьютер? Часть 59. Регистры процессора — быстрая память под рукой

Мы уже научились писать простые команды на ассемблере, используя мнемоники и регистры. Но как наш понятный человеку текст превращается в ту самую последовательность нулей и единиц, которую способен исполнить процессор? Этот волшебный процесс называется сборка, и за него отвечает специальная программа — ассемблер. Давайте разберемся, как он работает, шаг за шагом.

Вы создаете файл с расширением .asm, например, program.asm, и пишете в нем свой код. Этот файл — всего лишь обычный текстовый документ. Для процессора он не имеет никакого смысла. Его нужно перевести на машинный язык. Этим и занимается ассемблер.

1) Ассемблер читает исходный текст
Программа-ассемблер открывает ваш файл program.asm и начинает построчно его анализировать. Она ищет известные ей мнемоники (MOV, ADD, MUL), имена регистров (R1, R2) и числа.

2) Трансляция мнемоник в машинные коды
Для каждой встреченной строки ассемблер совершает ключевое действие: он смотрит в свою внутреннюю таблицу соответствий и заменяет мнемоники на соответствующие им 
опкоды (operation codes) — численные коды операций.

  • Ваша строка: MOV R1, 5
  • Ассемблер находит в таблице:
    Мнемоника MOV для регистра R1 -> опкод 10110000 (или 0xB0 в шестнадцатеричной системе, более компактной для человека).
    Число 5 -> 00000101 (0x05).
  • Результат трансляции: последовательность байтов 0xB0, 0x05.

Этот процесс повторяется для каждой команды.

3) Разрешение адресов (для меток и переходов)
В более сложных программах есть метки (например, metka:) и команды перехода на них (JMP metka). Изначально ассемблер не знает, по какому конкретному адресу в памяти будет расположена команда после метки. На этом этапе он вычисляет эти адреса и подставляет их в команды перехода.

4) Создание объектного файла
После обработки всего текста ассемблер не создает сразу готовую к исполнению программу. Вместо этого он формирует 
объектный файл (часто с расширением .obj или .o). Этот файл содержит:

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

5) Линковка (компоновка)
Часто программа состоит из нескольких исходных файлов и использует стандартные библиотеки. Задача 
линковщика (компоновщика) — взять все объектные файлы, склеить их вместе, подставить все внешние ссылки (т.е. подставить вместо имени функции ее реальный адрес) и создать итоговый исполняемый файл (например, program.exe).

Именно этот исполняемый файл операционная система загружает в память, и процессор начинает исполнять его машинный код.

Процесс сборки — это не один шаг, а конвейер из двух важнейших этапов:

  1. Ассемблирование: Трансляция человекочитаемого текста в машинный код (объектные файлы). Этим занимается ассемблер.
  2. Линковка: Компоновка нескольких объектных файлов в одну готовую программу. Этим занимается линковщик.

Только после этого написанная вами команда MOV R1, 5 окончательно превращается в байты 0xB0 0x05, упакованные в исполняемый файл, готовый к запуску. Этот процесс скрыт от пользователя современными средами разработки, но его понимание — ключ к глубокому владению программированием.

Спасибо за внимание!

Следующий урок:
Как работает компьютер? Часть 61. Весь путь от текста до работающей программы

Если вам интересно копать глубже, разбирать реальные кейсы и получать знания, которых нет в открытом доступе — вам в IT Extra Premium.

Что внутри?
Закрытые публикации: Детальные руководства, разборы сложных тем (например, архитектура высоконагруженных систем, глубокий анализ уязвимостей, оптимизация кода, полезные инструменты и объяснения сложных тем простым и понятным языком).
Конкретные инструкции: Пошаговые мануалы, которые вы сможете применить на практике уже сегодня.
Без рекламы и воды: Только суть, только концентрат полезной информации.
Ранний доступ: Читайте новые материалы первыми.

Это — ваш личный доступ к экспертизе, упакованной в понятный формат. Не просто теория, а инструменты для роста.

👉 Переходите на Premium и начните читать то, о чем другие только догадываются.

👍 Ставьте лайки если хотите разбор других интересных тем.

👉 Подписывайся на IT Extra на Дзен чтобы не пропустить следующие статьи

________________________________________________________________________

👇
Понравилась статья? В нашем Telegram-канале ITextra мы каждый день делимся такими же понятными объяснениями, а также свежими новостями и полезными инструментами. Подписывайтесь, чтобы прокачивать свои IT-знания всего за 2 минуты в день!

IT Extra