Какие приложения ассемблере в современной аппаратной дизайн? Является ли он по-прежнему широко используемым или большая его часть абстрагируется на более высоких языках ?
Существует несколько причин использовать ассемблер для программирования на уровне устройства. Языки системного уровня, такие как 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 и ассемблере), а также поддержка отладчики уровня отладки на уровне инструкций, связанных источник тоже.
Спасибо, это было очень полезно :) – user3625087
Стандарт для встроенных систем окончательно C с C++ становится все более популярным с ARM Cortex-M. Ассемблер используется для особых проблем, таких как DSP или только для нескольких системных заглушек, где вы не можете использовать C (например, части планировщика в RTOS). Даже там, большая часть кода обычно реализуется на C или C++, при этом код ассемблера инкапсулируется в очень низкоуровневые функции. – Olaf
Добавить к списку игрового программирования - не так важно, как раньше, но по-прежнему необходимо. –