Стоит ли учить диалект ассемблера?[закрыто]

StackOverflow https://stackoverflow.com/questions/27942

  •  09-06-2019
  •  | 
  •  

Вопрос

Мои цели сосредоточены на разработке программных приложений и, возможно, разработке веб-приложений, но, скорее всего, приложений для настольных компьютеров.Я вступаю на путь более глубокого знакомства с C/C++, но стоит ли мне идти гораздо дальше, в ассемблер?Или я не получу выгоды для достижения своих долгосрочных целей?

Это было полезно?

Решение

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

Тем не менее, проблемы, которые ставит сборка, очень интересны, и для их выполнения требуется совершенно иное мышление.

Я потратил немного времени на изучение сборки Z80, программируя ТИ-86 калькулятор.Набор команд Z80 довольно мал, а новизна программирования калькулятора на ассемблере очень забавна.

ticalc.org есть много хороших ресурсов на Программирование сборки TI.

Другие советы

Я очень удивлен, увидев так много ответов «нет» на этот вопрос.Я думаю ты должен научиться сборке.

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

Изучение ассемблера расскажет вам, что происходит внутри компьютера.Это поможет вам понять, что на самом деле делает программа.

Это действительно вопрос профессионализма.Собираетесь ли вы стать профессиональным инженером-программистом?Или вы собираетесь заниматься копированием и вставкой?Конечно, последний может оплатить счета, но быть профессионалом гораздо приятнее.

Когда я слышу, как кто-то говорит: «Нет, не утруждайтесь изучением ассемблера», для меня это звучит так: «Вот кулинарная книга по наведению мостов.Вам не нужно изучать физику или инженерное дело, чтобы построить мост.Просто следуйте этим рецептам.» Нет, спасибо.

Добрый день,

Я изучил ассемблер PDP, когда делал Elect.англ.степень в конце 70-х.Последний диалект ассемблера, который я действительно использовал, имел четыре различных режима адресации памяти.Последний диалект, который я просмотрел, имел 17 режимов!

Не уверен, что на самом деле дает вам обучение ассемблеру в наши дни.Тогда это была неотъемлемая часть CS-стрима у моего избранника.англ.степень.

Что касается изучения C++, я бы просто сел и поработал"Ускоренный C++" который приближается к C++ сам по себе, а не как «C с другими битами».

Что касается C, я бы просто поработал с последней версией «Язык программирования Си». (он же) К'н'Р

Надеюсь это поможет.

Ура, Роб

Теперь, если бы вы спросили о нанопрограммировании...(-:

«Стоит ли учить диалект ассемблера?»

Я профессионально программировал ассемблер.M68k с факсом и сканером.Также Windows VxD (драйверы виртуальных устройств) появились в Windows 3/3.1 за несколько дней до того, как у них появилось настоящее ядро.

Когда вы кодируете ассемблер для выполнения обычных программных задач (копирование памяти, объединение строк, вызов обработчиков прерываний и т. д.), это довольно интересно.Иногда вы кодируете ассемблер, который будет вызываться кодом C для максимально быстрого выполнения какой-либо специализированной задачи на данном процессоре.Это может быть более интересно, потому что вы ищете способы извлечь выгоду из каждого цикла, который дает вам процессор.Вас волнует, что находится в кэше L1 процессора.Вы заботитесь о выравнивании данных в памяти, чтобы избежать попаданий в кэш (если я помню этот термин).Вы заботитесь о двухконвейерной архитектуре процессора и использовании правильных 2, 3 или 4 инструкций в правильном порядке, чтобы 2, 3 или 4 события происходили за один такт (-один- из тех HZ в XgHz процессора).

Когда вы кодируете ассемблер для управления специальным оборудованием, вы теперь делаете такие вещи, как заполнение 16-байтового буфера памяти, настройку операции DMA и передачу этих данных на контроллер, который выполняет что-то вроде управления барабаном лазерного принтера.А барабан вращается, его невозможно остановить, и ему нужны следующие 16 байтов в течение следующих 5 мкс.Конечно, это можно сделать на C или C++.Но примеры бесконечны.

Возможно, я бы обрезал последнюю половину вашего вопроса "стоит ли это изучать диалект сборки?" И сделать это "стоит ли это, чтобы узнать?"

Если вы любите программирование, то то, как вы определяете «ценность», включает в себя некоторый компонент любви к программированию.В этом смысле я никогда чему-то не учился программированию и не думал, что оно того стоит.Даже если я не использовал его много послесловий.

В том же смысле я бы почти сказал, что чем сложнее чему-то научиться, тем больше оно «стоит».

Но если оставить в стороне всю эту пушистую чушь, я считаю, что стоит хотя бы получить некоторый фон сборки.Давайте выясним, как написать ассемблер, чтобы заменить несколько простых подпрограмм stdlib, таких как strcpy, memmove и т. д.Затем попробуйте оптимизировать их, вызывая их из C миллион раз, определяя время.

Я бы не стал изучать ASM.Если вы хотите изучить C/C++, начните с этого.По мере повышения качества вашего кода вы можете обнаружить, что вам нужен ASM.В 99% случаев вы этого не сделаете, но время от времени вам это может понадобиться.

Кроме того, знание ASM помогает понять, что происходит за кулисами C/C++.Но опять же, пока вы не станете более продвинутыми, вам, вероятно, это не понадобится.

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

Я изучал ассемблер 20 лет назад на Commodore и еще раз в университете на мэйнфрейме IBM.Не могу сказать, что это помогает мне в моей нынешней работе.

Я согласен с Марком.Я думаю, что это похоже на изучение MSIL при написании на C#, VB.NET или другом языке .NET.Полезно знать, что происходит «под капотом», но можно всю жизнь создавать приложения, которые работают и никогда в этом не нуждаются.

Нет.Если вы не хотите заниматься этим ради развлечения, вам действительно не нужно изучать ассемблер.

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

Если вам действительно нужно изучить ассемблер, вы это узнаете — я бы не стал изучать его ради изучения.

Если вы пишете неуправляемый C++, иногда полезно знать хотя бы базовые знания ассемблера x86, двоичных систем счисления и т. д.В основном я занимаюсь разработкой на C/C++, и иногда мне приходится отлаживать рабочий код на предмет ошибок, которые настолько специфичны для представления машинного кода, создаваемого компилятором, что единственный способ найти, а затем исправить ошибку — это прочитать декомпилированную сборку. и выяснить, почему компилятор сгенерировал его именно так.

Подробнее о сборке смотрите в вопросе: Как лучше всего изучать Ассемблер?В частности, для тех, кто имеет опыт работы с динамическими языками..

Сборка не очень сложная.Как только вы освоитесь с C, потратьте день или два на изучение основ ассемблера.Его полезность с точки зрения отладки огромна, плюс возможность писать код, который превосходит код C по скорости в 10, 15 или более раз, доставляет удовольствие.

Я бы не советовал изучать «современный язык ассемблера».

Однако зная немного о МОС 6510 Ассемблер и просмотр разобранного С64 Кернел, он жеэто ОС и интерпретатор BASIC, которые очень помогли мне понять, что происходит внутри компьютера - такие вещи, как прерывания и страницы памяти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top