Найти в Дзене

Зачем нужен Ассемблер

Я уже пытался рассуждать на эту тему. Но, как говорится, “у кого что болит…”. Так что порассуждаю снова. Но сначала небольшая историческая справка о том, как развивались языки программирования.

  • Машинно-ориентированное программирование (МОП). С этого всё началось. Это уже было программирование, хотя языком программирования машинные коды назвать нельзя. Программисты просто вводили в память коды команд и получали результат их выполнения. То есть это было, можно сказать, живое общение человека с машиной на языке машины. Без посредников. Поэтому машина очень хорошо понимала человека. Правда, для человека это было утомительно, потому что машинный язык для него ну совсем не родной.
  • Мнемонические команды. Чтобы облегчить себе жизнь, программисты придумали язык мнемонических команд, он же язык ассемблера. Это было близко к машинным кодам, и набор мнемонических команд соответствовал набору машинных команд. Просто для человека это было понятнее - он заменил цифры на буквы. Например, вместо кода 04, который простому смертному ни о чём не говорит, стали использовать мнемонику ADD - сокращение от слова Addition (сложение), что уже было намного понятнее. Почему же нельзя было сразу написать Addition, чтобы было уж совсем понятно? Ну тогда всё было не так просто и с памятью, и с устройствами ввода. Так что тратить время и память на ввод лишних букв никто не хотел. Да и обрабатывать потом всё это и преобразовывать в машинные коды - занятие тоже не простое. Обработчики-то писались на тех же машинных кодах.

  • Процедурное программирование. Основная мысль этого стиля программирования - алгоритмизация процесса решения задачи и выбор наилучшего алгоритма. Воплощение в жизнь этого замысла началось в 50-х годах прошлого века с появлением языков высокого уровня, в частности, Фортрана. Это позволило создавать программы не только профессиональным программистам, но и людям, занимающимся другими вещами. Например, математикам и физикам. Кстати, в этой среде Фортран до сих пор применяется.
  • Структурное программирование. Здесь основной замысел выражен создателем Паскаля Никлаусом Виртом: АЛГОРИТМЫ + СТРУКТУРЫ ДАННЫХ = ПРОГРАММА. И это было в то время (середина 60-х) хорошим ответом на очередной вызов в области программирования, когда объём исходного кода средней программы перевалил за 1000 строк, и писать такие программы на чистом ассемблере или даже на процедурном языке стало утомительно. Поэтому в 1971 году появился Паскаль, а в 1972 - Си. И это был очередной прорыв.
  • Модульное программирование. Однако программы неуклонно усложнялись. И впихивать их в один исходный файл было уже невозможно. Поэтому появилась очередная идея: спрятать от основной программы данные и процедуры внутри независимых программных единиц - модулей. Идея была воплощена в жизнь тем же Виртом в конце 70-х в языке Модула. А потом она также реализовалась в очень популярных тогда Турбо Паскаль и Турбо С.
  • Объектно-ориентированное программирование (ООП). С середины 80-х объём исходного кода средней программы перешёл отметку в 100000 строк. И здесь стало трудно создавать программы в разумные сроки даже с использованием всех существующих наработок. Надо было снова упрощать работу программиста. Поэтому появился этот стиль программирования, основной замысел которого - связать по смыслу структуры данных и алгоритмы их обработки, и поместить всё это в один объект. Причём сделать это так, чтобы программисту не было необходимости разбираться с тем, как всё это работает. Он просто брал объект и использовать его в своих целях. Ну это как водителю нет надобности знать, что происходит с двигателем при нажатии на педаль газа. Ему достаточно знать только одно - если нажать педаль газа, то автомобиль поедет.
  • Обобщённые технологии разработки приложений. Это уже практически сегодняшний день. ООП - это прекрасно. Но всё равно программисту надо писать код. И по большей части это один и тот же код (например, код создания окон, кнопок и т.п.). Поэтому появление визуальных средств разработки, фреймворков, библиотек, а также других новых технологий программирования было неизбежно.

Ну и причём же здесь ассемблер? Зачем он нужен, если технологии ушли так далеко вперёд?

Ну да. Большинству программистов он не нужен. Однако…

  • Современные средства разработки часто написаны на языках высокого уровня. Например, Python по большей части написан на С. Но на чём же написан С?
  • Ну если быть точным, то С - это язык. Он ни на чём не написан. Здесь имеется ввиду, конечно, компилятор С и другие программы, которые преобразуют язык в программу. Но смысл вы поняли. Так на чём же написан С?
  • Ответ очевиден - на ассемблере. Потому что ниже только машинные коды.

Так что какими бы крутыми ни были современные средства разработки, если начать разматывать клубок языков, на которых они написаны, то рано или поздно мы придём к ассемблеру, а потом к машинным кодам. Потому что никак иначе, чем выполнять машинные команды, современные компьютеры работать не умеют.

Да, разработчикам сайтов ассемблер не нужен. Программистам 1С тоже. Но если вы хотите разобраться, как работают программы на самом низком уровне, или хотите стать хакером (в хорошем смысле))), то без ассемблера вам ну никак не обойтись.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.