LINUX.ORG.RU

Нужно ли учить ассемблер?


2

3

Пишу на С++. Нужно ли учить ассемблер? МатЧасть (устройство оперативной памяти, указатели, сколько какая переменная занимает памяти) и так далее примерно знаю (опыт кодинга на с++).

Также очень поверхностно знаю как работает процессор(читал разные статьи на хабре).

Будет ли мне профить от учения ассемблера (Под профитом понимаю лучшее понимание Си-шного кода при роботе с памятью указателями и разные принципы оптимизации)

UPD Мне все равно на мой заработок. Я хочу программировать как бог.

Перемещено mono из talks



Последнее исправление: knotri (всего исправлений: 1)

Хуже не будет точно, учи, благословляем.

druganddrop-2 ★★
()

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

terradot
()

основы нужны, но углубляться не обязательно.

fornlr ★★★★★
()

Обычно те, кому нужно учить ассемблер, не задают такие вопросы.

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

BattleCoder ★★★★★
()

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

arturpub ★★
()

Также очень поверхностно знаю как работает процессор(читал разные статьи на хабре).

нихрена ты не знаешь, дружок.

устройство оперативной памяти, указатели, сколько какая переменная занимает памяти) и так далее примерно знаю (опыт кодинга на с++).

нихрена ты не знаешь, дружок.

nanoolinux ★★★★
()

Польза конечно же будет, только надо читать про современные процессоры. Потому что с тех времен, когда х86 появился, принципы оптимизации совсем другими стали.

amomymous ★★★
()

Нужно.

Пофиг, для какой ОС и для какого набора команд (след-но, для простоты лучше MS-DOS, 16 бит и реальный режим 8086). Это нужно исключительно для понимания того, как всё работает.

intelfx ★★★★★
()

На асме было прикольно писать под DOS. Всё просто и минимально. Под современные системы это уныние и п-ц.

yu-boot ★★★★★
()
Ответ на: комментарий от nanoolinux

Си/С++ какая разница? Если отбросить ООП (который я в принципе и не пользуюсь за пределами Qt) получится Си. Или что, в Си указатели по другому работают?

knotri
() автор топика
Ответ на: комментарий от King_Carlo

Ну вот пример. Есть огромный объект(например картинка в памяти) есть у меня указатель на эти данные. И есть функция которая может что то рисовать(но принимает она не указатель). Ну и в Си написано что в таких ситуациях просто разименовывается указатель..

data *ImgData;
// code
paint(*ImgData);

Я не могу понять что тут будет происходить на низком уровне. Но вроде как было бы полезно все это понимать.

knotri
() автор топика
Ответ на: комментарий от kto_tama

А где то пишут на асме за деньги?))// Ну кроме разработчиков драйверов.

knotri
() автор топика
Ответ на: комментарий от knotri

Но вроде как было бы полезно все это понимать.

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

King_Carlo ★★★★★
()
Ответ на: комментарий от yu-boot

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

2. пишешь игру на ассемблере под DOS.

3. ?????

4. PROFIT!

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

wakuwaku ★★★★
()
Ответ на: комментарий от wakuwaku

Могу писать под линукс? (Без графики разумеется. Но хотя бы вывести Hello World в терминал получится? )

knotri
() автор топика
Ответ на: комментарий от knotri

Как минимум nasm умеет собирать нужные бинарники. Конкретно линукс как целевая система - вариант не очень хороший.

wakuwaku ★★★★
()
Ответ на: комментарий от knotri

К черту заработок. Я хочу быть богом в программировании.

Это очень хороший посыл, главное с этим не затягивай. Поверь мне, шикарный дом, пара квартир, куча денег и 3-4 отличных авто совсем не лишние.

King_Carlo ★★★★★
()

UPD Мне все равно на мой заработок. Я хочу программировать как бог.

Для этого тебе нужно разбирать дизассемблером свои поделки в разных конфигурациях сборки.
ДИЗ-АСС-ЭМ-БЛЕ-РОМ
Возвращаемся к вопросу:

Нужно ли учить ассемблер?

Yustas ★★★★
()

Ассемблер нужно знать хотя бы на том уровне, чтобы понимать что на нём написано.
Это важно например при поиске ошибок ну и реверс-инжениринг

invy ★★★★★
()

Я хочу программировать как бог.

Главное как царь не программируй :)

slackwarrior ★★★★★
()

СтОит.

Ибо кульхацкерство отвлекает на себя неадекватную публику, которая, таким образом, не путается под ногами в прикладном (enterpriZe) программировании.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)
Ответ на: комментарий от invy

Ассемблер нужно знать хотя бы на том уровне, чтобы понимать что на нём написано.

Это важно например при поиске ошибок ну и реверс-инжениринг

А еще надо знать «русскую языку»(TM), чтобы уметь на ней выражать свои мысли.

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 1)

На си не пишу, но пробежался по основам ARM ассемблера. Мне понравилось. Кстати ARM часто советуют как первый ассемблер.

zinfandel ★★
()

Интеловский — в топку. Определенный смысл есть, только если будешь работать с DBI/DBA системами. Хотя, тот же валгринд напрямую с целевым ассемблером не работает: у него собственный IL.

Небольшой профит будет, если скуришь несколько интеловских руководств по архитектуре и программированию. Они весьма и весьма годные... Но *намного* больший профит будет если ты вместо этого будешь изучать потроха линукса (или винды).

PS: Хочешь программировать «как бог», тогда знай свою предметную область «как бог».

PPS: И да, учи Хаскель.

Macil ★★★★★
()
Ответ на: комментарий от BattleCoder

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

я вчера написал довольно сложный класс на C++, но по идее, там всё должен был выкинуть оптимизатор, и всё должно по идее работать просто и быстро. Т.е. если я пишу z=x+y, то CPU должен выполнять команду ADD. И всё. Не взирая на то, что x/y/z является достаточно сложным классом, из ~1500 строчек. И operator+() тоже далеко не тривиальный.

PS: да, в коде осталось только ADD. Gcc — годный компилятор.

emulek
()

Пишу на С++. Нужно ли учить ассемблер?

давно пишешь на C++? В первые три года — лучше не надо. Забудь, если учил.

устройство оперативной памяти, указатели, сколько какая переменная занимает памяти

тоже забудь. Это знать не только не нужно, но и вредно. Потому что int меняется, а код на C++ остаётся.

Будет ли мне профить от учения ассемблера (Под профитом понимаю лучшее понимание Си-шного кода при роботе с памятью указателями и разные принципы оптимизации)

будет. Отрицательный. Книжки пишут в расчёте на CPU 20и летней давности. Те процессоры давно стухли. И ты только всё испортишь. Потому что ты например не знаешь, что x>>1 быстрее x/2. Причина такому парадоксу много, оснавная причина в том, что gcc умеет переделывать x/2 в x>>1 (когда это надо), а вот наоборот — увы. Не факт.

Я хочу программировать как бог.

тогда не разбрасывайся, и учи C++.

emulek
()
Ответ на: комментарий от arturpub

Собственно все, чем сильно отличается «язык ассемблера» от сишки, это оголенность вышеописанных конструкций

нет. Оптимизатор всё радикально и кардинально меняет.

emulek
()
Ответ на: комментарий от nanoolinux

нихрена ты не знаешь, дружок.

ну дык и скажи что-то по делу. На хабре хоть что-то объясняют (дебилы, да), а здесь — только на|| посылают.

emulek
()

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

anonymous
()
Ответ на: комментарий от knotri

Если и правда в памяти валяется картинка, то в твоем примере data это структурный тип ее элемента (здесь мы хз что оно представляет, ты его не описал), а в паинт передается значение этого элемента. Собственно у паинта нет доступа к картинке, потому что ты ему в качестве аргумента дал не адрес, а первые несколько байт скопировал, поэтому смысла особого в написанном нет. Ну или имена вводят в заблуждение. Ассемблер тебе тут не поможет, ты сначала утонешь в новой среде, а потом выплывешь и очень потом все поймешь. Предлагаю сразу не тонуть и читать про структуру исполнения программ. На всех языках она практически одинакова — ни си, ни лисп, ни ява из ряда вон не выходят.

arturpub ★★
()
Ответ на: комментарий от knotri

Если отбросить ООП (который я в принципе и не пользуюсь

за чем ты тогда упомянул C++?

Или что, в Си указатели по другому работают?

ВНЕЗАПНО: да. -> является на самом деле оператором, который перезагружается, и мало того, ещё и рекурсивно. Потому указатели в C++ имеют абсолютно другой смысл. Только в твоих хэлловорлдах с int'ами указатели такие же.

emulek
()

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

Dlinnii
()
Ответ на: комментарий от knotri

Могу писать под линукс? (Без графики разумеется. Но хотя бы вывести Hello World в терминал получится? )

если с glibc, то да, можно.

emulek
()
Ответ на: комментарий от emulek

Я про видимую часть программы, а не про равноценные продукты преобразования. Начать с разбора выхлопов оптимизатора — самый тернистый способ стать царе^W богом программинга :)

arturpub ★★
()
Ответ на: комментарий от Macil

Интеловский — в топку. Определенный смысл есть, только если будешь работать с DBI/DBA системами. Хотя, тот же валгринд напрямую с целевым ассемблером не работает: у него собственный IL.

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

emulek
()
Ответ на: комментарий от arturpub

Я про видимую часть программы, а не про равноценные продукты преобразования. Начать с разбора выхлопов оптимизатора — самый тернистый способ стать царе^W богом программинга :)

начинать изучение конечно с выхлопа не нужно. Вопрос был «зачем изучать?». Изучать асм надо для того, что-бы понимать КАК это работает на самом деле. И ПОЧЕМУ один код работает быстро, а другой — тупит и глючит. Хотя алгоритм в обоих случаях переписан из книжки Кнута, в которой тот строго доказал, что код работает быстро и хорошо (кстати сам Кнут примеры даёт на асме, ЧСХ).

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.