У меня в исходных кодах на работе три или четыре ассемблерных подпрограммы (примерно в 20 МБ исходного кода). Все они являются SSE (2) и связаны с операциями с изображениями (довольно большими - подумайте, 2400x2048 и больше).
Для хобби работаю над компилятором, а там еще ассемблер. Библиотеки времени выполнения довольно часто полны ими, большинство из них связано с вещами, которые бросают вызов нормальному процедурному режиму (например, помощники для исключений и т. Д.)
У меня нет ассемблера для моего микроконтроллера. Большинство современных микроконтроллеров имеют так много периферийного оборудования (счетчики, управляемые прерываниями, даже целые квадратурные энкодеры и последовательные строительные блоки), что использование ассемблера для оптимизации контуров часто больше не требуется. При нынешних ценах на флэш-память то же самое касается памяти кода. Кроме того, часто существует ряд устройств, совместимых по выводам, поэтому масштабирование, если у вас систематически не хватает мощности процессора или флэш-памяти, часто не является проблемой.
Если вы действительно не поставите 100000 устройств, а программный ассемблер позволит действительно значительно сэкономить, просто поместив во флэш-чип меньшую категорию. Но я не из этой категории.
Многие люди думают, что встраивание - это оправдание для ассемблера, но их контроллеры имеют большую мощность процессора, чем машины, на которых была разработана Unix . (Microchip поставляется с микроконтроллерами на 40 и 60 MIPS по цене менее 10 долларов США ).
Однако многие люди застряли с наследием, поскольку изменить архитектуру микрочипа непросто. Также код HLL очень зависит от архитектуры (потому что он использует аппаратную периферию, регистры для управления вводом-выводом и т. Д.). Так что иногда есть веские причины продолжать поддерживать проект на ассемблере (мне повезло, что я смог настроить дела на новой архитектуре с нуля). Но часто люди обманывают себя тем, что им действительно нужен ассемблер.
Мне все еще нравится ответ, который дал профессор, когда мы спросили, можем ли мы использовать GOTO (но вы также можете прочитать это как ASSEMBLER): «если вы считаете, что стоит написать трехстраничное эссе о том, зачем вам эта функция, вы можете ее использовать . Пожалуйста, отправьте эссе со своими результатами ".
Я использовал это как руководящий принцип для низкоуровневых функций. Не стесняйтесь его использовать, но убедитесь, что вы правильно его мотивируете. Даже поставьте пару искусственных барьеров (например, в эссе), чтобы избежать запутанных рассуждений в качестве оправдания.