Каковы практические преимущества обучения сборке? - PullRequest
6 голосов
/ 08 января 2009

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

Каковы ваши предложения? Чего я упускаю, не изучая ассемблер и управление указателями / памятью в целом?

Ответы [ 14 ]

0 голосов
/ 08 января 2009

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

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

Кроме того, у разных архитектур есть свои особенности. Кто-то говорил о сборочном трюке, чтобы поменять 2 регистра на месте, включая xor. Это работает, и оно отлично работает для ядра исполнения по порядку (самый последний пример - Intel Atom и Via C7 для нетбуков), но не так хорошо для ядра вне очереди.

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

0 голосов
/ 08 января 2009

Ну, на практическом уровне я учился на ассемблере 6502, когда впервые учился программировать в начале 80-х. Я также сделал 8088 ассемблер. Это было случайное использование лет с тех пор, но я не могу сказать, что это когда-либо действительно выбивало меня из дыры более чем один или два раза за 25 лет. Groking C на довольно фундаментальном уровне гораздо полезнее. YMMV и это, конечно, полезно в качестве фона, но как прямая практическая выгода? Маргинал действительно.

И наоборот, одна вещь, которая оказалась полезной, находится на еще более низком уровне. Я провел урок по дизайну микросхем (NAND Gates и т. П.) И как часть этого преподавал формальную булеву логику на некоторой глубине. С тех пор это стало чрезвычайно полезным - удивительно, что количество кодеров, которые на самом деле не знают, что они делают с ands, ors и nots: -)

0 голосов
/ 08 января 2009

Еще одна практическая причина, по которой я могу придумать, - это обратный инжиниринг кода приложения для его модификации ТОЛЬКО в образовательных целях, поскольку он широко используется взломщиками для обхода средств защиты условно-бесплатных приложений, таких как ограничение по времени или серийные номера.

Приложение, такое как win32Dasm, может конвертировать исполняемые файлы в ассемблерный код, который впоследствии можно изменить с помощью Hex-редактора, такого как hiew. Вы можете многое узнать о ходе программы.

0 голосов
/ 08 января 2009

В наши дни многие языки ассемблера на самом деле довольно высокого уровня.

И всегда было верно, что если вы изучаете «C», это достаточно близко для сборки, чтобы получить большинство преимуществ обучения.

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

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