Исследование и анализ неочевидных преимуществ изучения низкоуровневого программирования для программного инженера в 2020 году - Студенческий научный форум

XII Международная студенческая научная конференция Студенческий научный форум - 2020

Исследование и анализ неочевидных преимуществ изучения низкоуровневого программирования для программного инженера в 2020 году

Востриков Е.И. 1, Абрамова О.Ф. 1
1ВПИ (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Перед тем как начать разбираться в теме моей статьи, необходимо определиться с двумя основными понятиями, а именно: “программный инженер” и “низкоуровневое программирование”. Начнём с первого понятия. Программный инженер – это человек, работающий в сфере информационных технологий, занимающийся созданием и вводом в эксплуатацию различной программной продукции. В частности, он работает непосредственно с клиентом, согласую основные моменты и концепции заказа. Далее разберём второе понятие, а именно, что называют низкоуровневым программирование. Как нам всем известно, обращение к центральному процессору компьютера производится непосредственно при помощи бинарных последовательностей, которые указывают на команды процессора и ячейки памяти, использующие данной командой. Так как команд довольно много и они достаточно длинные, запомнить их будет весьма затруднительно, по этой причине появилось так называемое низкоуровневое программирование, которое позволило программисту писать программы для компьютера на языке низкого уровня, обращаясь непосредственно к памяти, процессору и периферийным устройствам. Ярким представителем языка низкого уровня является Ассемблер.

Основная часть

Как правило, каждый начинающий программист после того как написал несколько программ на таком языке как Ассемблер, начинает задумываться о необходимости изучения низкоуровневого программирования. И не всегда в пользу ассемблеров. На самом же деле, это очень полезный и нужный опыт для любого программного инженера. На первый взгляд может показаться, что никаких преимуществ низкоуровневые языки программирования, по сравнению с такими языками как PHP, Java, JavaScript, C++, Python, C#, не имеют. Но если провести более тщательный анализ, то окажется, что это далеко не так. Во-первых, достаточно существенным преимуществом любой программы, написанной на низкоуровневом языке, является её быстродействие. Так как обращение происходит непосредственно к процессору, то отсутствуют скрытые фрагменты кода, которые генерируются трансляторами с языков программирования высокого уровня. Иначе говоря, на ассемблере вы сможете написать программу, работающую намного эффективнее, быстрее (в плане исполнения) и меньше, чем та, что преобразует компилятор с языка высокого уровня в бинарный код. Кроме того, немаловажным преимуществом низкоуровневого программирования является то, что в нём мы можем максимально адаптировать свою программу и воспользоваться преимуществами конкретной платформы. Что, естественно, увеличит её эффективность при минимальных затратах памяти.

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

Представим отрывок программы написанный на языке С:

for(i=N-1; i>0; i--){

for (j=0; j<i; j++){

if(mas[j].year>mas[j+1].year || mas[j].year == mas[j+1].year && mas[j].month>mas[j+1].month || mas[j].month == mas[j+1].month && mas[j].day>mas[j+1].day)

tmp = mas[j];

mas[j] = mas[j+1];

mas[j+1] = tmp;

}

}

Ключевыми моментами в данной программе будет сложное условие и участок кода, где мы меняем местами элементы массива структур.

Давайте посмотрим, как будет выглядеть наше условие, преобразованное компилятором на язык Ассемблера (рис 1).

А теперь посмотрим на то, как написал этот участок кода специалист.

mov ax, [si].year

mov bx, [di].year

cmp ax, bx

jg further

cmp ax, bx

jne skip1

mov ax, [si].month

mov bx, [di].month

cmp ax, bx

jg further

cmp ax, bx

jne skip1

mov ax, [si].number

mov bx, [di].number

cmp ax, bx

jg further

jmp skip1

Очевидно, что данный код намного читабельнее и проще, чем тот который преобразовал компилятор.

Теперь посмотрим на то, как будет преобразован код, в котором мы меняем местами элементы массива структур (рис 2).

И как он будет представлен нашим специалистом.

further:

mov ax, [di].number

mov bx, [di].month

mov cx, [di].year

mov dx, [si].number

mov dop_per1, dx

mov [si].number, ax

mov dx, [si].month

mov dop_per2, dx

mov [si].month, bx

mov dx, [si].year

mov dop_per3, dx

mov [si].year, cx

mov ax, dop_per1

mov [di].number, ax

mov ax, dop_per2

mov [di].month, ax

mov ax, dop_per3

mov [di].year, ax

Что мы можем сказать об этих двух примерах? По ним абсолютно точно понятно, что любой код, написанный квалифицированным специалистом на Ассемблере, будет намного быстрее, понятнее и компактнее, чем тот, что вам преобразует компилятор. И, если вы хотите, чтобы ваши программы работали максимально быстро и эффективно, при этом затрачивая на это минимум памяти и используя все возможные преимущества конкретной платформы, то Ассемблер – это именно то, что вам надо, и его полезность в данной области сложно переоценить.

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

Вывод

Программирование на языках низкого уровня даёт немалые преимущества, как для самой программы, так и для программного инженера. Но, как бы не было обидно, недостатки при написании программ на чистом Ассемблере, без остатка покрывают все его преимущества. И любой программист, который начинал с языков высокого уровня, таких как Java, C++, C#, а потом переходил на низкоуровневое программирование, прекрасно понимают, о чём я говорю. Однако, ассемблерные вставки, грамотно используемые, позволят реализовать максимально эффективный программный код.

Библиографические ссылки

Будковский Н.В. Assembler – актуально ли это? [Электронный ресурс] / Н.В. Будковский, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Моргунова О.М. Есть ли будущее у Ассемблера? [Электронный ресурс] / О.М. Моргунова, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Котов В.Вл. Реализация пользовательского интерфейса с помощью машинно-зависимых языков [Электронный ресурс] / В.Вл. Котов, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Мордасов Ю.В. Использование низкоуровневого программирования в разработке веб-систем [Электронный ресурс] / Ю.В. Мордасов, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Муравьев Е.Г. Как я изучал Ассемблер: добрые советы будущим товарищам по несчастью [Электронный ресурс] / Е.Г. Муравьев, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Просмотров работы: 2