2015-08-07 3 views
1

Я искал хорошее место, чтобы начать изучение дизайна/программирования встроенных систем, и хотя все предлагают новички, такие как Arduino и RaspberryPi, я никогда не видел предложений для программирования на уровне сборки. Недавно я закончил бакалавр по информатике, но меня все больше привлекает аппаратное, а не программное обеспечение. Я взял один курс аппаратного проектирования, и мы сделали сборку для 68k и логического дизайна в Logism. У меня есть малина Pi, и некоторые из них испортили, но языки, используемые для этих устройств, все еще более высокого уровня (C, C++, Python).Где язык ассемблера, используемый для программирования аппаратного обеспечения?

Поэтому у меня есть несколько вопросов, так как я действительно заинтересован в более низком уровне дизайна для чипов/компьютерной техники:

Каких приложений ассемблера в современном проектировании аппаратного средств? Является ли он все еще широко используемым или его большая часть абстрагирована языками более высокого уровня?

Если все еще широко используется, какие виды работ связаны с программированием Ассамблеи? Каковы наиболее популярные платформы для программирования сборки (68k, x86 и т. Д.)?

Наконец, какие ресурсы для современного программирования Ассамблеи, если это применимо?

Спасибо, и снова я рассмотрел некоторые другие вопросы о погружениях в встроенные системы, поэтому, надеюсь, мои вопросы достаточно разные, но не стесняйтесь отмечать это, если мои вопросы уже были услышаны!

ответ

7

Каковы приложения языка ассемблера в современном оборудовании дизайн? Является ли он по-прежнему широко используемым или большая его часть абстрагируется на более высоких языках ?

Язык ассемблера используется в конкретных случаях использования. Он по-прежнему является наиболее распространенным в конкретных случаях использования программного обеспечения встроенных систем, однако он по-прежнему присутствует в других проектах низкого уровня, таких как ядро ​​Linux. Используется здесь и там, потому что есть определенные вещи, которые можно сделать только в сборке, и потому что сборка приводит к более быстрому и меньшему коду. Я дам вам один пример реальной жизни, чтобы сделать его более понятным для вас. Некоторые критические части прошивки для смарт-карт написаны на сборке, чтобы защитить выполнение программного обеспечения от различных типов атак, а сборка - это единственный язык, на котором вы полностью контролируете двоичное представление программы. Компилятор может оставить защитное отверстие в прошивке, которая может быть точкой входа для злоумышленника.

Если все еще широко используется, какие виды работ связаны с программированием ?

Вот вам несколько примеров инженерных должностей, требующих передовые знания на языке ассемблера:

  • Compiler инженер.
  • Инженер-программист.
  • Защищенный инженер прошивки.
  • Malware Analyst.

Какие наиболее популярные платформы для программирования на ассемблере (68k, x86 и т.д.)?

Проверяйте наиболее популярные архитектуры процессора в эти времена, и у вас будет ответ (спойлер Intel x86/x64, ARM).

И, наконец, какие ресурсы для современных сборочных программ, , если это применимо?

Google

+0

Спасибо, это было очень полезно :) – user3625087

+0

Стандарт для встроенных систем окончательно C с C++ становится все более популярным с ARM Cortex-M. Ассемблер используется для особых проблем, таких как DSP или только для нескольких системных заглушек, где вы не можете использовать C (например, части планировщика в RTOS). Даже там, большая часть кода обычно реализуется на C или C++, при этом код ассемблера инкапсулируется в очень низкоуровневые функции. – Olaf

+1

Добавить к списку игрового программирования - не так важно, как раньше, но по-прежнему необходимо. –

0

Какие приложения ассемблере в современной аппаратной дизайн? Является ли он по-прежнему широко используемым или большая его часть абстрагируется на более высоких языках ?

Существует несколько причин использовать ассемблер для программирования на уровне устройства. Языки системного уровня, такие как C и C++, могут работать в автономных системах с ограниченным количеством ресурсов и без каких-либо ОС. Раньше было обычным прибегать к ассемблеру для реализации секций критического кода времени (часто с небольшим количеством доказательств необходимости в моем опыте), но с современными оптимизирующими компиляторами, которые редко необходимы, а компилятор инкапсулирует опыт набора инструкций, который потребовал бы человека много часов, чтобы узнать только об одной архитектуре - поэтому компилятор часто будет бить человека по производительности.

Разработчики, которые потратили годы на то, чтобы оттачивать свои навыки ассемблера для одной архитектуры, могут быть справедливо горды своими достижениями, но часто неохотно рассматривают новые архитектуры, потому что их архитектурные навыки, которые могут позволить победить компилятор, являются излишними и являются часто неохотно признают, что современный компилятор может часто добиваться лучших результатов в целом, потому что это лишает законной силы их предыдущую тяжелую работу. Если вам нужно быстро двигаться (и, как правило, есть коммерческий императив), ассемблер не может этого сделать, и я буду опасаться разработчика, выступающего за использование ассемблера, не получив вначале нужных результатов в C или C++ (или ADA или Forth - ничего, кроме ассемблера).

Я бы не писал ассемблер-разработчикам их как динозавров, возможно (на самом деле я бы - но я стараюсь быть вежливым ;-)), но за пределами самого низкого уровня системного бутстрапа, обработки прерываний или контекстного переключателя (который часто предоставляемый существующим кодом или библиотеками в любом случае), ассемблер - это то, к чему вы прибегаете, когда это необходимо, а что планируете использовать с самого начала - это обычно "premature optimisation".

Если все еще широко используется, какие виды работ связаны с программированием ? Каковы наиболее популярные платформы для сборки программирование (68k, x86 и т. Д.)?

Его нет. Очень мало. За более чем 25 лет встроенной разработки в системах реального времени я редко писал какой-либо ассемблер, но иногда ему приходилось читать его - часто компилятор сгенерировал ассемблер.

Где код ассемблера необходим в тех областях, где язык высокого уровня не может быть достигнут, что относится к доступу к регистрам ядра центрального процессора, не связанным с памятью. Такой доступ необходим, например, для реализации переключения контекста в RTOS - но этот код может быть очень маленьким, и копия «котельная» копируется - вам необязательно писать такой код самостоятельно. См., Например, here, где небольшие разделы встроенного ассемблера используются в основном C-коде для выполнения планировщика задач на ARM Cortex-M.

В архитектуре с неядерным отображением ввода/вывода обычно выполняются инструкции inp/outp, требующие реализации ассемблера, хотя часто это обеспечивается функциональным интерфейсом C целевой библиотекой или встроенным компилятором. Для ввода/вывода с отображением памяти в C или C++ нет ничего, что предотвращает доступ к произвольным адресам памяти. Однако целевое оборудование может реализовать уровни привилегий или защиту памяти, которые ограничивают такой доступ, для управления такой защитой может потребоваться код, который не может быть реализован на языке высокого уровня; но, как правило, предоставляется библиотека или внутренняя поддержка.

На ARM Cortex-M можно запустить код C непосредственно из вектора сброса и полностью реализовать обработчики прерываний в коде C без ассемблерного клея - поэтому в некоторых случаях сборщик не нужен.

И, наконец, какие ресурсы для современных сборочных программ, , если это применимо?

Большинство C и C++ инструмент-цепи включают в себя автономный макро-ассемблер и поддержку в линии сборки (смешанный C и ассемблере), а также поддержка отладчики уровня отладки на уровне инструкций, связанных источник тоже.

0

Каковы приложения языка ассемблера в современном оборудовании дизайн? Является ли он по-прежнему широко используемым или большая его часть абстрагируется на более высоких языках ?

Это все еще очень распространено в низкоуровневой электронике, что означает встроенные микроконтроллеры, а не микропроцессоры.

Если все еще широко используется, какие виды работ связаны с программированием ? Каковы наиболее популярные платформы для сборки программирование (68k, x86 и т. Д.)?

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

Некоторые чипы, которые обычно программируются на языке ассемблера, - Atmel, Microchip PIC, Cypress, Parallax, Renesas, MSP430. Я был бы удивлен, увидев широкомасштабное использование языка ассемблера для более крупных приложений на большом железе, таких как процессоры Intel или что-то, что работает без RTOS.

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