> Да полно облостей, в основно да те, где приходится работать конкретно с железом.
Нет вы не поняли, я говорю не о том где можно применять его, а где без него не обойтись? Собственно, только компиляторостроение приходит на ум, или и тут можно без него обойтись?
Если "С достаточно с головой" то не нужен вообще.
В остальном - это хитрые оптимизации и хаки, работа с железом для которого нет сголовойдостаточного С, учёба и просто для души =)
системное программирование. Драйвера, ядро, компиляторы. В случае с оффтопиком ещё и вирусы с антивирусами. Вроде всё. Ещё им можно отладчик путать, если очень боишься reverse engineering.
fft и ему подобные числодробительные операции (кодеки, например) , cipher'ы. Микроконтроллеры же нониче такие пошли, что там уже на С чистом и плюсах кодят вовсю, или вообще с Linux'ом предустановленным идут. (Впрочем ещё не везде, где-то ещё PIC'и используются)
Загрузчики тоже, в основном, на С пишут, только некоторые аппаратно зависимые и критичные части на асме. (см., например, U-Boot).
> Современные как пишут, там идет трансляция в ассемблер и далее в машинный код или как?
Нет. Если нужно промежуточное представление - есть вещи типа C--. Ассемблерный код нормальный компилятор генерить не будет, если специально не попросить.
Бывает что и на сях, но для рутинных операций, вызываемых по множеству раз, вроде fft, шифрования-дешифрования, до сих пор рулит асм. Посмотрите, хотя бы, на реализацию основных cipher'ов в ядре Linux'а.
> зачем нужен ассемблер и где его применяют в 2008 году?
рассмотрим множество конструкций С и их отображение на инструкции целевой платформы
возьмем множество всех инструкций целевой платоформы
найдем их разность
полученное множество и будет являться применением ассемблера ;)
Скажем, при использовании интеловских компиляторов - я почти уверен, что разность будет равна нулю. Что примерно соответствует реальной применимости ассемблера в современных условиях.
Ну, например, только на C нельзя написать тредовую библиотеку или ядро ОС. Потому что всякие команды управления прцессовом и memory barrier-ы компилятор геренить не умеет...
> Почему только C?
хорошо, любой ЯП высокого уровня
> Скажем, при использовании интеловских компиляторов - я почти уверен,
> что разность будет равна нулю
разность никогда не будет равна нулю
есть инструкции, которые по определению не поддерживаются компиляторами
SIDT, SGDT, SLDT, LLDT, LIDT, LGDT, SYSENTER, SYSEXIT, SYSCALL, SYSRET, IRET, CLTS, RDMSR, WRMSR, RDTSC, RSM, STR, SWAPGS, UD2, ARPL, HLT и пр.
> Хрена.
вообще говоря это функция, причем реализована она через вставку ассемблерного кода, т. е отображения конструкция С -> инструкция CPU в данном случае нет
без ассемблера не обойтись при написании стартапа (кода, который потом вызывает функцию main).
Остальное обычно можно и на Си написать (если не учитывать скорость) с ассемблерными вставками команд, которые компилятор не поддерживает (примеры уже привели - lgdt mov cr0,eax и прочие подобные)
не. ну ещё есть архитектуры, под которые нету С (некоторые DSP, например).
asm не нужен. Куда уж там асм, если некоторые вопят, что си не нужен (жаберы и шарперы).
Последний раз реально использовал асемблер под железячки (PIC контролеры) в универе. Да и то в этоже время был си компилер, но нас заставляли писать на асме.
В работе никогда асм не пригождался. Единственным исключением бал asm {int 3;} под офтопиком;)
Среднестатестическому пограмеру асм не нужен.
>> некоторые вопят, что си не нужен (жаберы и шарперы)
>Глупости они вопят, не повторяй их.
Хочется верить в это.
>> Среднестатестическому пограмеру асм не нужен.
>Дважды глупость - во-первых, хотя бы для общего развития нужен; во-вторых, среднестатистичекого прогера не существует.
А вот зачем жаберу знать асм? Если сама идеология языка перекладывает часть ответственности с программиста на среду (работа с указателями, гарбиж колекшен,...). Поможет ли ему это знание в работе?
Мне кажется, что нет.
Плюсовику зачем асм? Как часто Вы перепроверяете компилятор, убеждаясь, что он сгенерил код лучше, чем Вы могли бы сами написать?
Сколько раз за последний месяц Вам приходилось отлаживатся без символов и исходных кодов (проходясь дебагером по ассемблеру)?
Не спорю, что плюсовику, а тем более голому сишнику - асм не повредит, но он не необходим.