TGViewer
Physics.Math.Code Physics.Math.Code @physics_lib · 147K subscribers
Post #14426 28.7K
🖥 Почему Ассемблер — это круто, но сложно

Есть высокоуровневые языки — это те, где вы говорите if — else, print, echo, function и так далее. «Высокий уровень» означает, что вы говорите с компьютером более-менее человеческим языком. Другой человек может не понять, что именно у вас написано в коде, но он хотя бы сможет прочитать слова.

Но сам компьютер не понимает человеческий язык. Компьютер — это регистры памяти, простые логические операции, единицы и нули. Поэтому прежде чем ваша программа будет исполнена процессором, ей нужен переводчик — программа, которая превратит высокоуровневый язык программирования в низкоуровневый машинный код.

Ассемблер — это собирательное название языков низкого уровня: код всё ещё пишет человек, но он уже гораздо ближе к принципам работы компьютера, чем к принципам мышления человека.

Вариантов Ассемблера довольно много. Но так как все они работают по одинаковому принципу и используют (в основном) одинаковый синтаксис, мы будем все подобные языки называть общим словом «Ассемблер».

Чтобы понять, как работает Ассемблер и почему он работает именно так, нам нужно немного разобраться с внутренним устройством процессора.

Кроме того, что процессор умеет выполнять математические операции, ему нужно где-то хранить промежуточные данные и служебную информацию. Для этого в самом процессоре есть специальные ячейки памяти — их называют регистрами.

Регистры бывают разного вида и назначения: одни служат, чтобы хранить информацию; другие сообщают о состоянии процессора; третьи используются как навигаторы, чтобы процессор знал, куда идти дальше, и так далее.

Какими бывают регистры?

▪️Общего назначения. Это 8 регистров, каждый из которых может хранить всего 4 байта информации. Такой регистр можно разделить на 2 или 4 части и работать с ними как с отдельными ячейками.
▪️Указатель команд. В этом регистре хранится только адрес следующей команды, которую должен выполнить процессор. Вручную его изменить нельзя, но можно на него повлиять различными командами переходов и процедур.
▪️Регистр флагов. Флаг — какое-то свойство процессора. Например, если установлен флаг переполнения, значит процессор получил в итоге такое число, которое не помещается в нужную ячейку памяти. Он туда кладёт то, что помещается, и ставит в этот флаг цифру 1. Она — сигнал программисту, что что-то пошло не так. Флагов в процессоре много, какие-то можно менять вручную, и они будут влиять на вычисления, а какие-то можно просто смотреть и делать выводы. Флаги — как сигнальные лампы на панели приборов в самолёте. Они что-то означают, но только самолёт и пилот знают, что именно.
▪️Сегментные регистры. Нужны были для того, чтобы работать с оперативной памятью и получать доступ к любой ячейке. Сейчас такие регистры имеют по 32 бита, и этого достаточно, чтобы получить 4 гигабайта оперативки. Для программы на Ассемблере этого обычно хватает.

Так вот: всё, с чем работает Ассемблер, — это команды процессора, переменные и регистры.

Здесь нет привычных типов данных — у нас есть только байты памяти, в которых можно хранить что угодно. Даже если вы поместите в ячейку какой-то символ, а потом захотите работать с ним как с числом — у вас получится. А вместо привычных циклов можно просто прыгнуть в нужное место кода.
Подробнее в нашей статье в vk группе Physics.Math.Code

📕 Практический анализ двоичных файлов [2021] Эндриесс Дэннис

📙 Тайная жизнь программ. Как создать код, который понравится вашему компьютеру [2023] Джонатан Стейнхарт

📚 Подборка статей по Assembler от Ravesli

📙 LLVM: инфраструктура для разработки компиляторов [2015] Бруно Кардос Лопес, Рафаэль Аулер

📚 Подбор книг по электронике и микроконтроллерам: ОТ ЛАМЕРОВ ДО АЦЦКИХ РАДИОЛЮБИТЕЛЕЙ 👨🏻‍💻📡

📕 Modern Assembly Language Programming with the ARM Processor [2016] Larry D. Pyeatt

📕 Изучаем Ассемблер [2005] Крупник

📘 Assembly Programming and Computer Architecture for Software Engineers [2017] Brian R. Hall, Kevin J. Slonka

#программирование #низкоуровневое_программирование #Linux #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
  • ❤ 101
  • 🔥 54
  • 👍 28
  • 🤔 3
  • 🙈 3
  • 👨‍💻 1
  • 🤝 1
More from @physics_lib
  1. Oct 10, 2026📝 Как бы вы решали второе уравнение, если бы у вас под рукой не было бы компьютера ? #зад…
  2. Oct 10, 2026👨🏻‍💻 Технически map медленнее цикла for Рассмотрим на примере движка JavaScript. Когда…
  3. Oct 9, 2026🟥 Эксперимент с маслом и водой в вакуумной камере Вода в вакууме кипит, потому что при ни…
  4. Oct 9, 2026📜 В 1900 году никому не известный французский математик Луи Башелье защитил в Сорбонне ди…
  5. Oct 7, 2026😵‍💫 Плоттер, который рисует картинки и даже портреты в полярной системе координат У поля…
  6. Oct 7, 2026🔴 ЗАДАЧА ДНЯ: Геомеханика и теория упругости Представьте, что вы проектируете горный тонн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →