А как же расширения процессора, недоступные из HLL? Как с ними быть?

ассемблер

Вы таки навлекли на себя гнев хотя бы одного asm-фанатика :)
Я собственно о чем. ASM -нужно изучать для того что бы:
- Понимать как работает код в HLL-языках. Что такое указатель я понял лишь написав первую программу на ассемблере.
- Для оптимизации. Современные компиляторы генерируют какой то бред, а не код.
- Для доступа к расширениями процессора. SSE, MMX, FPU, а скоро и AVX. Все они сулят серьезный прирост производительности.
- Для написания драйверов. Нет серьезно, но как можно получить доступ к GDT, IDT, Page Directory или Page Table ? Да ведь никак по сути.
- Для гибкой настройки производительности приложения. При желании можно сделать несколько функции оптимизированных под разные архитектуры и даже если эту оптимизацию сделает компилятор, CPUID данные можно получить только из ассемблерной вставки.

Я вообще не понимаю как можно заниматься системным программированием не зная ассемблера? А ведь это не самая малораспространенная область. Да предположим пользовательские приложения можно и нужно писать на HLL целиком и полностью, но вот утилиты для работы с железом компьютера, ну никак не получится обойтись одними HLL.

Может быть вы имели ввиду что речь идет сугубо о пользовательских приложениях? А вообще то и их частенько пишу на ассемблере( ну нравится мне это дело, удовольствия масса, когда видишь что твоя программа маленькая, быстрая и собрана чуть бы не по байтику :)).

Примечание:
Не одним переносом переменных в регистры, оптимизация жива. Там же масса параметров. Ну и я не предлагаю писать на нем огромные модули с этими самыми сотнями переменных. Да и вообще при правильном разделении кода, этих самых сотен вообще нигде возникнуть не должно. Пара массивов, индексы и одиночные переменные. Вместе не больше 10-15 штук. Их вполне можно помнить. Оптимизация к тому же заключается еще и в использовании правильных команд, некоторые команды настолько устарели что у них уже есть аналоги работающие в пару раз быстрее. Скажем так же команда LOOP медленнее простой связки cmp+jb. Это самый вопиющий пример который я помню, разница в четыре раза. х86 от части имеет свойства VLIW-процессоров, у него есть конвейеры и пока выполняется одна команда, может быть выполнена и еще одна но та которая принадлежит другому конвейеру.

Документ который вы привели это тот же ассемблер только из коробки. Компиляторы не научились оптимизировать код самостоятельно.
Про то что там с FPU получается, это вообще веселье(хотя я лично отказался от использования FPU как такового в пользу SSE, разве что когда тригонометрические функции нужны, пользуюсь).

Драйвер можно писать на сях, согласен. Тут я преувеличил.

А вот по поводу последнего у меня назревает вопрос. Как вы думаете сколько нынче компьютеров имеют процессоры с х86 архитектурой? :) Да и не вымрет она через 20 лет, а раньше скорее всего, ей на смену придет х86_64, но это тоже самое только в профиль. Стоит учитывать то что ей не даст умереть корпорация ее создавшая.
Ответы:
Знать не знать это 1 дело, писать на данный момент на нем уже прсто нет смысла, если только какие-то низкоуровневые функции/процедуры ибо все тоже самое почти можно написать на том же C/C++
Ассемблер конечно знать хорошо, особенно с целью дебага, но вы слишком уж толсты :) Либо вы ничего не понимаете в программировании, иначе не несли бы бред про оптимизацию (ни за что не поверю например, что вы способны в уме проанализировать частоту использования нескольких сотен переменных и определить, какие из них нужнее в регистрах процессора), что без ассемблера невозможно юзать mmx, sse итп (пруф что можно: http://ssd.sscc.ru/chair/files/architecture/Lab1sse.doc),  что нельзя написать драйвер на сях (можно, вот вам простой пример для маленьких: http://www.pcports.ru/articles/ddk2.php), в частности, и с GDT, IDT и прочим можно работать не только ассемблерными вставками (пруф: http://www.osdever.net/bkerndev/Docs/idt.htm)...
> Для оптимизации. Современные компиляторы генерируют какой то бред, а не код.
Если использовать компиляцию с обратной связью, запихнуть весь код в один файл, заставить компилятор собирать под современные процессоры, то может получиться весьма не плохой код, иногда даже компиляторы самостоятельно используют sse инструкции. Вот чего они точно не умеют, так это выделять в стеке произвольное количество памяти, а на ассемблере запросто. Можно сэкономить много процессорного времени на выделениях памяти если пользоваться этим трюком.
Нет времени писать много. :) Напишу какие-то разрозненные тезисы.
Про оптимизацию, по разному бывает, но бывает, что компиляторы очень хорошо оптимизируют, вручную такого не сделать.
В Win x64 нет не только ассемблера, но даже вставок С-шных типа __asm. И все драйверы пишутся без ассемблеров всяких.
Сам я профессионально занимаюсь программированием много лет (в том числе системным, включая драйверы и программированием встроенных систем), но последние программы на ассемблере были мной написаны 15-18 лет назад, да и то,  все были для технологий и контроллеров на то время морально устаревших, просто такие были заказы.
Для того, чтобы понимать, как работает код, для отладки (особенно, всяких синих экранов), или, когда надо заменить в программе какой-нибудь байт, например 0x74 на 0xEB ;) и т.п. знание инструкций процессора очень полезно, но это не значит, что надо на ассемблере как языке писать программы.
В конце 80-х у меня много приятелей писали для Z80 прямо шестнадцатеричными кодами. Думаю, что это ещё круче, чем на ассемблере. ;)
Против ассемблера я ничего не имею, но изучать его начинающим, в качестве языка программирования, однозначно не советую. :)


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.