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

Что такое ассемблер?
Ассемблер или язык ассемблера определяется на вики примерно так:
Язык ассемблера - это низкоуровневый язык программирования для компьютеров, микропроцессоров, микроконтроллеров и других программируемых устройств. Он реализует символическое представление машинных кодов и других констант, необходимых для программирования процессоров данной архитектуры.
Вики часто любит переборщить с объяснениями. Итак, простыми словами:
Язык ассемблера - это когда вы говорите на естественном языке процессора, каждая написанная вами инструкция напрямую преобразуется в инструкцию для выполнения процессором.
Здесь нет никаких высокоуровневых вещей. Строки символов и массивы данных не существуют, это просто данные. Объектно-ориентированный подход - это чуждо. Даже такие уютные удобства, как проверка границ массива, перестают существовать. Как и сам массив. Массив в ассемблере - это то, чем вы его программируете.
Серьезно, кто в наше время кодит на ассемблере?
Хотя программирование на ассемблере действительно выкидывает переносимость за окно, это не так страшно, как кажется, ведь существует всего несколько процессоров, используемых повсеместно. Кроме того, существует множество сходств - одна и та же программа на x86 будет работать на различных процессорах Intel x86 и даже на таких клонах, как процессоры AMD. Аналогично, скомпилированный под ARM исполняемый файл для ARMLinux будет работать на целом ряде устройств.
Итак, если вы хотите написать ворд или парсер вконтакте, то ради бога, используйте язык высокого уровня.
Если же вы хотите испачкать руки - ассемблер практически необходим. Пачкать руки можно, например, оптимизируя структуры изображений и прокладывая код, чтобы сделать игру как можно быстрее, написать специализированный драйвер устройства для работы с конкретным оборудованием или портировать что-то для работы с новым оборудованием.
Есть и совсем другая группа. Встраиваемые контроллеры.
Позвольте представить вам Olimex SAM3-H256 на базе Atmel ATSAM3S4BA-AU. Сам чип стоит 11 евро, при оптовых заказах цена снижается примерно до 7 евро. Он предлагает...
- ARM Cortex-M3, работающий на частоте 64 МГц (набор инструкций Thumb2, 16/32-битные инструкции, трехступенчатый конвейер, аппаратное деление, одноцикловое 32-битное умножение)
- Блок защиты памяти
- 256KiB встроенной Flash (128 бит широкий доступ)
- 48KiB встроенной SRAM
- 16KiB ROM с процедурами загрузчика
- Сторожевой таймер и мониторинг питания
- USB 2 (до 12 мбит/с)
- 2 USART, поддерживающие ISO7816 (доступ к смарт-картам), IrDA (инфракрасный порт), RS-485 (традиционный последовательный порт), SPI (базовый доступ к SD картам) и т.д.
- 2 2-проводных UART (базовый последовательный интерфейс)
- Совместимый интерфейс I2C, I2S, высокоскоростной интерфейс SDIO/SD/MMC
- Трехканальный 16-битный таймер/счетчик, может захватывать, сравнивать форму сигнала и работать в режиме ШИМ. Также 2-битный счетчик Gray Counter (двунаправленный) для управления шаговым двигателем.
- 32-битные часы реального времени с календарем.
- 10-канальный АЦП (аналогово-цифровой) с программируемым коэффициентом усиления.
- 2 12-битных выхода ЦАП
- Аналоговый компаратор
- 32-битный блок вычисления CRC (таким образом, CRC может выполняться аппаратно).
- До 47 цифровых линий ввода/вывода с возможностью прерывания (триггер по фронту или уровню), дребезгом и фильтром глюков.
- Контроллер прерываний, поддерживающий до 30 маскируемых прерываний с 16 уровнями приоритета.
Несомненно, существует компилятор языка C, однако язык ассемблера обеспечивает максимальную гибкость.
Кто возьмется за ассемблер?
Если ваша жизнь в кодинге началась с Pascal и закончилась Delphi или, возможно, VisualBasic, ассемблер может показаться вам немного сложным. Паскалеподобные языки изо всех сил стараются защитить вас от самих себя и навязать строгое поведение. VisualBasic более расслаблен, но он прилагает еще больше усилий, чтобы «спрятать сложные вещи». В конце концов, в VB вы можете создать работающую программу, спроектировав «как она будет выглядеть», прежде чем дважды щелкнуть на объектах (иконках, кнопках и т. д.) и прикрепить код к возможным событиям (например, this-button-clicked-upon).
Если ваша жизнь в кодинге - это PHP и JavaScript, боюсь, вам придется перейти на «темную сторону» и написать настоящую программу, а не скрипт :-)
Если ваша жизнь в кодинге - это C и C++, то вы уже на полпути. Отбросьте все напыщенные позы С++ (на самом деле, бросьте С++ совсем) и посмотрите на некоторые более грязные уголки С. Там скрывается нечто, опасно близкое к тому, чтобы разговаривать с машиной на ее собственных условиях.
Если вы выросли в 80-е годы на неполноценных диалектах BASIC, которые требовали множества команд PEEK и POKE... скорее всего, вы программировали на ассемблере, только делали это безумно сложным способом (вычисляя шестнадцатеричные коды инструкций и их параметров, а затем побайтно вбивая это в память).
Будучи кодером на ассемблере, вы можете возвышаться над другими программистами. Нет, серьезно, это часть устава программиста на ассемблере, или что-то в этом роде. Вас мало волнуют точки с запятой или то, с какого числа считать массив - с нуля или с единицы. Вы разговариваете с компьютером на его собственных условиях. Поэтому вы станете элитой программистов. Почти любой может написать функциональную программу на Си. Любая бабушка может сделать это с помощью VisualBasic. Но нужен определенный тип людей, которые будут работать с компьютером по его правилам. Считайте это корридой компьютерного мира...
Сейчас я не программирую на ассемблере, но иногда пишу о разном, что изучал раньше.

Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.