@cthulhudx

Есть ли в области системного программирования такие задачи, для которых целесообразно только использование ассемблера?

Есть ли в области системного программирования такие задачи, для которых целесообразно только использование ассемблера? Есть ли узкие места, в которых использование таких языков как C/C++ не предоставит средств для реализации задачи, или же на C можно написать абсолютно все - начиная с драйвера, заканчивая загрузчиком операционной системы?
  • Вопрос задан
  • 1094 просмотра
Решения вопроса 6
@nirvimel
C и C++ - кроссплатформенные языки. Все платформо-специфические вещи пишутся на ассемблере, например: чтение/запись системных регистров процессора в ядре ОС.

А вот насчет строгой необходимости в использовании ассемблера ради повышения производительности я бы поспорил. Компиляторы могут не успевать за производителями железа, которые постоянно подбрасывают новые технологии (типа AVX) в новые железки, но освоение этих технологий компиляторами - только вопрос времени.
К тому же intel не зря создала свой компилятор. Наивно думать что человек способен использовать особенности intel-процессора каким-то более оптимальным способом чем компилятор от самих intel.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В области системного программирования гораздо чаще приходится читать ассемблер, чем писать на нём.
Ответ написан
Комментировать
@Mirn
в микроконтроллерах АРМ асм тоже не нужен: есть хорошие компиляторы и оптимизаторы типа gcc, keil, iar. Есть библиотеки с готовыми асм вставками от производителя проца - арм консорциума. Итог писать на асме не нужно никогда и ничего. Очень и очень иногда использовать спец либы ДСП может да, с стилем "псевдо-ассемблер на си" когда инлайн-функциями записаны асм команды обрабатывающие вектор. Но обычно уже все свёртки, фурье и тд очень быстрый уже есть. И оптимизировать там - всё равно что биться голой об стену и воевать с компилятором насколько близко ты его догонишь.

Но если так хочется:
Есть соглашения как писать ассемблерный код, какие регистры волатильные какие нет, как организовывать стековый фрейм и тд и тп. И если всего этого придерживаться, то выйдет очень долго и нудно, а результат очень сильно разочарует.

Да раньше для арм МК писали на асме код запуска, куски RTOS, обработка исключений, но с освоением кортекса, формата LD и секций gcc даже это стало не нужно вообще.
За свою практику (7 лет на арм) я ни разу на асме не писал. Нужно быстродействие - ставь FPGA.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Криптография считается?
Ответ написан
alex-saratov
@alex-saratov
На языках высокого уровня, при столь развитых компьютерах конечно можно написать все, но оно отражается на размере кода. Уже никто не обращает внимание на размеры драйверов.

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

PS. Вирусы забыл...
Ответ написан
абсолютно все

абсолютно все не напишите, тот же SYSENTER компилятор за вас не сделает. По большому счету большая часть кода - на Си (структуры данных, алгоритмы), а сугубо низкоуровневые вещи - например, переключение стека - делается ассемблерными вставками. Ну или вывод в порт - не представляю как это сделать в рамках Си.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы