нынешнее время в одном месте!
----------------------------------------
Ассемблер активно применяется в написании (программировании):
- Драйверов (возможно применение вставками, но применять придётся. Например, для доступа к регистрам CR и т.п.)
- Микроконтроллеров и встраваемых процессоров. (особенно актуально было для прошивок старых телевизоров)
- Антивирусных ядер (для написания сложных систем распознования вредоносного ПО, требуется знать ассемблер. Пример: эвристический анализ)
- Своего языка программирования, написание компиляторов (чтобы создать высокоуровневую оболочку поверх голых процессорных инструкций, нужно знать сами эти инструкции как их кодировать, всё это относится к знаниям ассемблера, помимо этого, компилятору понадобится функция оптимизации)
- Игр (ассемблерные вставки и знания ассемблера используют для оптимизации критически важных для производительности участков кода. Игры, в которых использовался ассемблер: TIS-100, RollerCoaster Tycoon, Shenzhen I/O, Human Resource Machine. В нынешнее время сами разработчики игр редко используют ассемблер, однако он активно используется разработчиками игровых движков, таких как Unity, CryEngine и др.)
- Операционные системы (аналогично с драйверами. Полностью ассемблер задействован в загрузчике. В ядре - вставками)
- Виртуальные машины / эмуляторы. Виртуальные машины тесно взаимодействуют с ОС, поэтому частично написаны на ассемблере. Как, например, LLVM или Surface Duo Emulator.
- Систем защиты ПО. У такого рода программ часто внутри используются сложные полиморфные генераторы, шифрование, самомодифицирование кода и куча других хитростей - всё это возможно только на ассемблере. Пример: Themida, VMProtect
- Вредоносное ПО. Шифровальщики, и т.п. Проекты такого рода, как и системы защиты ПО, могут использовать сложные алгоритмы шифрования и самомодифицирования кода. Хотя, в нынешнее время очень редко, но на рынке будет сильно цениться как знания, так и работы с использованием ассемблера, а вирусные аналитики знатно попотеют.
[В тексте задействованы только случаи, в которых вынужденно применяют ассемблер в нынешнее время. Конечно, на ассемблере можно написать абсолютно всё то же, что и на ЯВУ.]
#faq
Ещё в составе различных архиваторов, энкодеров и т.п. упаковщиков обычно есть ассемблерные вставки.
Спасибо
Согласен, кроме одного утрчнения. То, что написано про игры, относится не только к играм. Я с помощью ассемблера тоже оптимизирую узкие участки кода для расчетов, не связанных с играми.
Да?
Слово "вынужденно" следует понимать как "под пытками, вопреки здравому смыслу, заставляют"
Нет, под "вынужденно" значит "ты не напишешь этот проект без знаний ассемблера, и не используя ассемблер", не надо уже коверкать слова и чушь всякую писать.
Давай разберём это снова. Если выкинуть ложные утверждения и случаи, когда ассемблер нужно знать, а не писать на нём, то останутся древнее железо (для развлечения) и свой язык программирования (видимо тоже). И то, для второго лучше знать LLVM.
Будет ли плюсом опыт на асме для софтвейр инженера?
Ах да, у нас эмуляторы и виртуальные машины теперь чисто для развлечения. Интересненько... Про системы защиты ПО ты успешно пропустил, и... что там ещё было? Драйверы с асмовставками\интрисинками. По-твоему, разработчики должны вслепую тыкать какой-то интрисинк, даже не зная, что это означает?
возможно, если дело будет с нативным софтом
Эмуляторы и виртуальные машины не пишут на асме. Они могут генерить машинный код, могут читать машинный код. Но писать их на асме можно только для развлечения. Асмовставки уже написаны, тебе не нужно знать о том, что там внутри. Ты используешь готовый макрос или функцию. Документация пишется не к асму, а к этой функции. Например state = interrupts_disable(); ... intertupts_restore(state);. Видишь асм? И я не вижу. Может он там есть, может нет. Системы защиты ПО, написанные не в 90х и/или не школьниками, которые макросами заменяют mov на xor, чтобы вирустотал не ругался, пишутся не на асме.
Я имею ввиду прохождение собеседований, понимание программирования в целом
Меня бы интересовало, насколько быстро ты начнёшь мне генерировать деньги.
Программисты не генерируют деньги
А нафиг они сдались? Охлаждать их в офисе кондиционерами?
Я не говорил, что их пишут на ассемблере. Я сказал, что его там вынужденно применяют (асмовставки\интрисинки), и его нужно знать, ВЫНУЖДЕННО, потому что без него не напишешь тот самый эмулятор\ту самую виртуальную машину. Насчёт интрисинков - как по-твоему разработчик должен узнать, что есть такой интрисинк? Он сначала гуглит "как включить прерывание?", и находит интринсик, который ссылается на команду на ассемблере. Но это мы ещё пропустим тот момент, как он вообще дошёл до прерываний, не зная ассемблера)) И не надо коверкать! Интринсики не так выглядят, а вот так примерно - __builtin_infq, то есть почти полностью копируя имя команды на ассемблере.
Я загуглил про прерывание. https://learn.microsoft.com/en-us/azure/rtos/threadx/chapter4#tx_interrupt_control Где мне узнать команду на ассемблере?
Давай ещё раз. Ты пишешь про применение. Я говорю про знание. Если у тебя где-то рядом пробегает машинный код, то знать асм конечно надо. Но знать != писать.
Это что вообще за команда?
Знать = применять, и НЕ ВСЕГДА = писать, но зачастую обрывками писать придётся. Нормальный человек, который использует интринсик, знает, что это команда на ассемблере, и только благодаря ассемблеру, он сейчас пишет эту программу.
Что? Ты назвал llvm виртуальной машиной/эмулятором? Подскажи, а что конкретно ssa эмулирует?
Иди почитай, что такое LLVM.
Тебя не смущает, что от этой расшифровки они открестились лет 10 назад?
👍
Окей, тогда я открою тебя глаза, что llvm это компилятор, вот так чудо.
Лучше измерь в процентном соотношении, насколько мне пофиг.
А ересь писать тебе не пофиг?
Нет, потому что эту часть я скопировал у статьи от @jin_x Остальную часть я дописал сам.
Тебе не режет глаз фраза "виртуальные машины тесно взаимодействуют с ОС, ПОЭТОМУ частично написаны на ассемблере"?
А что тут должно резать? В виртуальных машинах используются kernel-mode драйвера различные для "пробрасывания" портов, и это частично всё написано на ассемблере (асмовставки\интринсики), так что нет, ничего не режет, всё правильно)
У меня был курс писания, ПОЭТОМУ я очень чувствителен к такого рода оборотам.
Может курс письма?...
Writing, там упор делается на связанность и аргументирование.
Ну просто "курс писания" слух режет
Это не моя статья. Из моего там только несколько цитат (и та, что на слайде — не моя). LLVM хоть и называется виртуальной машиной, но по факту таковой не является. Не знаю почему автор привёл в пример Surface Duo Emulator и LLVM, а не JVM и CLR, например. Вообще говоря, статья написана не специалистом в низкоуровневом программировании.
Обсуждают сегодня