Инженеров, которые проектируют процессоры не существует. Это ложь навязанная правительством!
Просто по gcc нашел информацию, а по остальным нет. https://m.habr.com/ru/post/478124/ здесь кстати в комментах этот вопрос тоже обсуждается. Вы бы хоть одну ссылку на источник привели, где бы говорилось что у компилятора vs самоцель сгенерить asm код, а не просто опция.
VS нет цели сгенерировать asm файл, это просто способ генерации машинного кода который позволяет разбить компиляцию на два этапа:
- "эвристический" когда VS анализирует код на ЯВУ с целью сгенерировать максимально эффективный код результат которого она представляет посредством asm файла.
- "механистический" когда ML64 и LINK напрягают все силы чтобы переварить полученный asm файл в исполняемый код.
Такой подход выбран не потому что а ASM это вершина программирования а потому что так можно разбить работу на два этапа а за одно обезличить ЯВУ, то есть VS не важно на C++ или C# или каком другом языке она все их конвертирует в ASM и скормит ML64 и LINK.
Обратите внимание промежуточный результат на asm даже не сохраняется потому что в реальности он никому и не нужен, завтра может выйти обновление по оптимизации, новый сет команд или еще что и VS сгенерирует новый asm по новым правилам.
ASM не цель VS а лишь средство.
Для повышения производительности. Можно просто подключить библиотеку и получить прирост 2-10 раз из воздуха. Ничего не делая, просто импортируя в одном из модулей. А можно воспользоваться компилятором и производительность вырастит еще больше, но там языковые конструкции будут немного другими.
Эта библиотека существовала от сотворения мира или были/есть люди которые ее волшебным образом написали при том так что она дает 2-10 раз скорости?
Как они это сделали, почему их код в 2-10 раз лучше?
специально заморочился: поставил студию, снес все ml.exe и ml64.exe. Простейший HelloWorld скомпилировался и запустился и из IDE и из командной строки.
Что я сделал не так?
Да ктож его знает, могу предположить что ты тратишь время чтобы доказать кому то в сети что он не прав. Знаешь ли не очень умное время провождение.
А вы упертый)) Вот первоисточник, так сказать от авторов того что вы мне показываете: https://docs.microsoft.com/ru-ru/cpp/build/reference/fa-fa-l... Этот параметр используется как доп опция. Обратите внимание что есть даже ключ который добавит в полученный листинг машинный код, что как бы намекает...
Это параметр который позволяет сохранить этот файл, если он не будет установлен то VS создаст asm файл скормит его ml64.exe и link.exe получит результат и сотрет его за ненадобностью.
Ты отрицаешь очевидно из упрямого нежелания признать что твое первоначальное утверждение было ошибочно.
Не желание признавать свое заблуждение единственный твой мотив.
Под давлением фактов ты бул вынужден признать это в отношении GСС но упорно не желаешь признать это в отношении VS потому что в этом случае вся твоя точка зрения что ты отстаивал превращается в тыкву.
параметр который ты указал это и есть сигнал VS сохранить генерируемый ассемблерный код.
наоборот, за время диалога, я узнал как работает gcc (ни разу с ним не работал, только C++Builder и VS) освежил память в целом по C++ и asm'у (лет 5 наверное их не касался), даже смахнул пыль с очень старого своего проекта.
Пытаться в чем-то разобраться это разве плохо?
Искрении рад что общение со мной было для тебя продуктивно, сам же я пока не могу продолжить разговор по данному вопросу потому что мне нужно разобраться почему озвученная тобой ситуация имеет место быть.
Все перечисленные тобой понятия ни за ни против ассемблера, они параллельны, и даже больше если вдруг ты решишь использовать все эти возможности а использовать ты их сможешь только если решишь написать свою ось ну или хотя бы драйвер, выясниться что нет ЯВУ на котором ты бы мог это сделать. Эти понятия за гранью прикладных языков программирования.
Ассемблер это не цель, это средство, не надо наделять его ни волшебными ни демоническими способностями. если нужно используй, если избыточно, а чаше всего избыточно сложно/долго/дорого то отложи его и реши вопрос на ЯВУ быстрей/дешевле/легче.
ну, вообще говоря, "программами для программирования" можно назвать различные ide. которые свой компилятор не изобретают, а скармливают готовому.
и для этого действительно ассемблер может быть не нужен.
хотя хорошая ide все равно умеет понимать и анализировать код
крч кинул, пришлось самому этот асм учить..
а поддержка вк после жалоб так и оставила этого "автора" дальше заниматься мошенническими действиями..
Так надо было бы мне писать, я тебе бесплатно бы сказал что я 8085 в гробу видал.
Сейчас вас этим древним говном так замордуют что после него у тебя останется стойкое желание бить в лицо любому кто только произносит "ассемблер".
Я тебе бесплатный совет дам, отмучайся и забудь это говно что вас мучат, захочешь все таки вернуться к ассемблеру то учи 64-битный векторный ассемблер.
По сути вас даже не Паскалю учат а чему то типа Кобола.
Это говно умерло уже лет 30 назад и продолжает жить только в головах преподавателей. Потому как им глубоко плевать научитесь вы чему то в институте или нет.
Промежуточный в том плане что отсутствуют ссылки на переменные, методы, классы которые лежат в других модулях. А так-то набор инструкций там не меняется. Компоновщик как раз референсы и проставляет. Насчёт gcc посмотрел, на самом деле делает сначала ассемблерный листинг, а потом уже его транслирует. Наследие с 60х годов. Майкрософт и Борланд так не делают.
Ну да ну да, расскажи мне, 25 лет в ИТ, от прогера на C++ до enterprise architect. Я путаю, конечно. Что ж я там путаю, интересно?!
Компилятор делает объектный файл (машинный код). А линкер уже компанует объектные файлы в исполняемый.
Никаких промежуточных трансляций в ассемблер никто не делает.
из чего компилятор делает объектный файл? я просто знаю что ты ошибаешься но хотел бы показать тебе в чем.
Потому что это такой известный IT срачь. Всех маленьких програмеров сильно мучают в универах заставляя их писать на давно умершем 16-битном асме, в итоге они начинают его люто ненавидеть с религиозной ненавистью.
Компилятор компилирует в машинный код. Ассемблер, это язык для программирования.
Результатом работы программы может являться байт код, а могут быть языки интерпретируемые. В них скомпилированные команды транслируются в машинный код в помощью разных средств.
Программисту не надо писать компилятор, если только он не поддерживает свой язык программирования, или работает в соотвествующей конторе.
По моему, у вас какое-то неверное понимание копм. технологий.
Если ты пользуешься VS открой настройки глянь их внимательно и ты увидишь что половина их это вопросы какой ассемблер ты хочешь направить в ML64.EXE
Вроде как обычно заставляют кодить совсем уж базовые вещи аналогичные тем которые находятся на первых 20-30 страницах самоучителя по Сям.
Как по мне он офигенен как подготовка к C, т.к. после Асма он начинает казаться мегавысокоуровневым с его нормальными ветвлениями, циклами и отсутствием необходимости использовать метки с макросами.
Не говоря о том что там уже разрешают пользоваться библиотеками.
Почитай побольше про оптимизацию компиляторов и поищи там ассемблер:
https://ru.m.wikipedia.org/wiki/Оптимизирующий_компилятор
https://ru.m.wikipedia.org/wiki/Категория:Оптимизации_компилятора
Только начал читать и сразу же прочитал про необходимость просматривать код для поиска возможности замены одних ассемблерных команд на другие.
Ты хотел помочь мне привести примеры что я прав?
Все эти понятия поясняют как CPU работает за пределами ЯВУ, что бы такие неучи, вроде тебя, потом не говнокодили. Использовать ассемблер в 99% не нужно, но знать основы - правильно и необходимо.
Так и ладно. Зачем вам защищённый или виртуальный режим, кольца защиты и тд. Главное, что бы понимали: регистры, стек, ветвления, условия, математические операции. Как все работает на низком уровне. Так-то достаточно и Z80 изучить было.
Ну насчет кобола ты не прав. Под него заточены ibm-овские майнфреймы и около 70% банковского софта на нём до сих пор работает. А следовательно это всё надо еще и поддерживать. В общем нишу свою занял и живет. Удивительно даже.
Не буду наставить на точности своего сравнения, но ужас от того что 2020 людей заставляют кодить на 16-битном асме повергает меня в уныние.
Зачем они так с людьми поступают?
Ты слегка не понял какой ассемблер они придумали. У них что-то типа CIL или LLVM, платформонезависимая обёртка над псевдоассемблером в который они компилируют код. Этот псеводассемблер к железу не привязан если что.
А потом они уже прогоняют через ассемблер для конкретной архитектуры.
Этот псевдо ассемблер максимально к нему приближен к реальному так чтобы при конвертации из платформа независимого ассемблера в платформа зависимый одной псевдо инструкции соответствовала максимум две три реальных инструкции.
Смотри какое просто логическое построение: каким бы абстрактным и высоко уровневым не был бы язык программирования всегда наступает момент когда он должен быть переведен в машинный код и тут ты можешь выбрать два пути ты можешь для каждого языка писать новый компилятор а можешь написать для языка препроцессор который будет любой язык переводит в языко независимый формат (чувствуешь как байто кодом запахло) и этим "промежуточным" языком естественным образом является ассемблер.
Подавляющие большинство IDE конвертирует текст программы с ЯВУ а Асм а его отсылает в компилятор, который в таком случае может быть один для всех языков.
VS даже есть настройка чтобы сохранить этот промежуточный файл. Если его открыть там сотни тысяч строк ассемблерного кода
из исходников, из кода....*.cpp для с++, *.asm для ассемблера....Ассемблер(транслятор) так же генерит объектные файлы, которые нужно потом собирать линкером. https://habr.com/ru/post/150327 вот кстати хорошая статья о том чем занимается компоновщик
Почитай побольше про оптимизацию компиляторов и поищи там ассемблер:
https://ru.m.wikipedia.org/wiki/Оптимизирующий_компилятор
https://ru.m.wikipedia.org/wiki/Категория:Оптимизации_компилятора
https://habr.com/ru/company/badoo/blog/317864/
Вроде уважаемая контора а какой то глупостью занимаются, свой ассемблер придумывают, прям как microsoft, те тоже зачем то придумали MASM и зачем то все продолжают и продолжают его поддерживать.
Ты им позвони и скажи что они забыли про космическую радиацию.
Вы хотите показать мне, что ваш компилятор умеет генерировать ассемблерный листинг? Но это же не значит что полученные объектные файлы создаются из этого самого листинга.
Опция полезная, не спорю, раньше приходилось дизасемблером пользоваться или отладчиком что бы понять че там накомпилировалось.
Допустим VS генерирует сперва ассемблерный код, а потом скармливает его компилятору в качестве которого она использует ML64.EXE.
Ассемблерный листинг используется как промежуточное звено, вне зависимости от языка программы она переводиться в MASM64, а потом отправляется в ML64.EXE и LINK.EXE и уже они генерируют двоичный код.
Ну и зачем же тогда знать ассемблер, человеку занимающими высокоуровневыми языками программирования? Джаваскриптеру например какому-нибудь?
Он и тебе то не нужен судя по всему. Машина сама компилит его.
Написание вручную програм на языке ассемблера широко не востребовано, потому что компиляторы гораздо лучше оптимизируют, чем человек.
Есть отдельные исключения под узкие задачи, но массово это нафиг никому не нужно.
Не бывает компилятора папы и компилятора мамы у которых рождается компилятор гений. Если компилятор чтото круто оптимизирует то это потому что какой то крутой чел знающий ассемблер вдоль и поперек написал этот код оптимизации.
Ассемблер не востребован в IT второго мира к которым можно отнести постсоветское пространство, потому как оно живет за счет решений первого мира. Там пишут компиляторы и придумывают языки программирования.
Здесь все это лишь потребляют.
Для написания компилятора надо знать архитектуру процессора, пайплайн, как работает предсказания, параллелизм, работу гипертриденга, расширения, модели памяти и собственно саму теорию разработки компиляторов.
X86 ассемблер это такая мелочь, которая особо и плюсов не даст.
п.с.
В математических библиотеках ассемблер используют как раз в качестве костыля чтобы максимально подходящие расширения процессора задействовать. Никто в здравом уме математику на асме не пишет, в основном Фортран.
п.п.с.
Компиляторы в РФ, кстати, пишут. Те же мцст и Эксельсиор.
Ты осознаешь что ты противоречишь сам себе?
Ты перечислил процессорные потроха и увенчал все это заявлением что для работы с ними знание ассемблера не нужно от слова совсем.
Ты чувствуешь логическое противоречие в своих словах?
Вообще грустно, асм он как Хаскель - абсолютно не нужен, но разобравшись в нём ты станешь чуточку лучше и больше поймешь в своих питонах.
По этой причине половина математической библиотеки GO написана на асме, им просто было скучно.
Ассемблер не востребован на постсоветском пространстве, потому что его IT рынок вторичен, он живет и пользуется продуктами первого мира и не испытывает потребности писать на ассемблере. Все что ему надо уже сделано в первом мире.
Нет, не чувствую, знание потрохов процессора не даёт умение писать на ассемблере, умение писать на ассемблере не даёт знания потрохов процессора. Понятия не эквивалентны.
Я сказал не то, что знание ассемблера не нужно, а то, что знание ассемблера и разработка оптимизирующего компилятора это как знать алфавит и уметь писать книги. Если ты знаешь ещё три алфавита понту от этого особо нет.
Программист, который программирует программы для программирования, программирует не на ассемблере
Вот только результатом работы его программы является ассемблерный код который его программа (компилятор) генерирует на основе программного кода приложения.
Когда программист пишет компилятор он пишет программу для генерации ассемблерного кода.





IT-юмор
7.1K постов53.2K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору