Вам когда-нибудь нужно писать настоящий код на ассемблере? - PullRequest
7 голосов
/ 15 декабря 2011

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

Итак, мой вопрос: когда вам когда-нибудь нужно писать ассемблер в реальном коде?
Это просто хорошо изучать?
Есть ли какие-нибудьего реальное использование при написании кода на C?

Будем благодарны за любые полезные комментарии или ответы!

Ответы [ 6 ]

8 голосов
/ 15 декабря 2011

Несмотря на то, что написание кода на ассемблере становится все более редким, по-прежнему очень хорошо изучать ассемблер, просто чтобы понять, как все работает под капотом. Современные оптимизирующие компиляторы C / C ++ позволяют вам писать код на C, который преобразуется в инструкции по сборке очень высокого качества, часто превосходящие то, что вы могли бы написать вручную, за счет того, что результат становится менее читабельным (например, путем вставки пустых инструкций для оптимизации использования Конвейер процессора).

Если вы пишете компилятор для новой архитектуры, библиотеки очень низкого уровня или встроенной системы со строгими ограничениями ресурсов, вам может потребоваться использовать сборку. Для всего остального C и C ++ будут делать то же или лучше.

5 голосов
/ 15 декабря 2011

Я собирался написать длинный пост, но решил подвести итог:

  1. встроенный код, загрузчики, серверные части компилятора
  2. да, это поможет вам понять и отладить ваш скомпилированный код
  3. единственный раз, когда я использовал его в c, для чтения регистра часов реального времени
4 голосов
/ 15 декабря 2011

Это редко. Мне никогда не приходилось за 23 года + карьеры. Но я в основном работаю в прикладной области клиент-серверной базы данных, есть задания, где вы будете часто ее использовать или, по крайней мере, должны знать, как на самом деле работают процессоры.

Однако это было первое, чему я научился, не считая базовой цифровой электроники, и я бы сказал, что обучение очень помогло мне в карьере и хобби.

3 голосов
/ 16 декабря 2011

Профессиональное использование ассемблера довольно распространено во встроенном мире.Вокруг нас множество приложений, в которых микроконтроллеры делают простые, но полезные вещи.Например, взгляните на семейство микроконтроллеров tinyAVR от Atmel , особенно ATtiny13 с его смехотворно маленькой программной памятью в 1 КБ и вообще без оперативной памяти, за исключением 32 8-битных регистров ЦП.Удивительно, что эти чипы способны .Этот чип стоит около одного доллара при покупке в больших количествах.Поэтому, когда вы создаете большое количество устройств, которым требуется простая (или даже не совсем простая) логика, экономия затрат на производство аппаратного обеспечения намного превышает затраты на ручную разработку кода на ассемблере, чтобы заставить его работать на крайне ограниченной платформе.

2 голосов
/ 16 декабря 2011

Я уже дважды делал это в 2011 году, и я в основном работаю над бизнес-приложениями на Java. Это пригодилось для быстрого создания файла setup.exe для установки JRE и установки приложения. Можно было бы сделать это в C, но быстрее захватить и настроить ассемблер, чем компилятор, и для такого простого приложения время записи сравнимо в любом случае ... Также использовал его для работы с проблемой сопряжения с устройством USB. Сбой по неизвестным причинам через JNA, поэтому я написал его на ассемблере, чтобы убедиться, что я знаю, куда и когда идут все биты.

2 голосов
/ 16 декабря 2011

У меня было много случаев, когда мне нужно было написать asm-код на работе, когда в C либо вы вообще не могли делать определенные вещи (например, обращались к специальным регистрам CPU или использовали системные инструкции CPU), либо скомпилированный код C был слишком медленнымили слишком большой (компилятор не был достаточно хорош).

Тем не менее, доля кода asm или время, затрачиваемое на его написание, было довольно незначительным.

Обучение asm - это хорошо.Он заставляет вас «видеть» код C, предсказывать, какие инструкции и во сколько он превращается, приблизительно оценивать скорость частей кода.В процессе вы изучите ряд приемов оптимизации и других приемов, а также несколько классных алгоритмов / методов, которые затем сможете перенести в код на языке Си.Просто посмотрите на эти многочисленные вопросы об указателях C или преобразовании чисел между двоичной и десятичной или арифметикой произвольной точности.Знание асма помогает с этими и другими вещами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...