LINUX.ORG.RU

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


2

3

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

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

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

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

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



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

Сначала изучи простой i8086, в котором только ax в 16 бит, и только один.

Наверное тебе тоже стоит это сделать. Кто тебе сказал, что у него только ах 16 битный? :) Чем меньше ты знаешь по теме, тем больше даешь советов.

anonymous
()

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

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

Какие ключевые слова на тему ассемблера в линукс?

#ненужно

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

Си/С++ какая разница?

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

Пожалуйста, не пиши больше.

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

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

Знание ассемблера - это не про язык программирования, а про архитектуру железа. Соответственно, для начала нужно прочитть книжку по архитектуре процессора. Шеновский «Modern Processor Design: Fundamentals of Superscalar Processors», наверное, перебор будет, но что-то фундаментального прочитать надо. В былое время ведь 12-летние дети на Спектрумах начинали писать на ассемблере, есть книжки, понятно объясняющие, что такое компьютер.

Далее, напиши на Верилоге простейший процессор (буквально АЛУ с program counter и памятью), истина откроется. Можешь J1 детально разобрать: http://www.excamera.com/sphinx/fpga-j1.html Это хоть и фортовый процессор, но форт, считай, ассемблер и есть.

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

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

mv ★★★★★
()

Учить — в принципе, полезно. Лучшее понимание получить — возможно. Написать несколько учебных программок — пожалуй. А вот серьёзно на нём программировать — не стоит.

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

Пожалуйста, не пиши больше.

Раньше я нормально себе программировал на С++ который считал Си с ООП. Но тут на лоре сказали что я лох и у меня настало просветление. Теперь я даже Hello World написать не могу.

knotri
() автор топика

Похеллоуворлдить на ассемблере лишним не будет.
Но использовать ассемблерные вставки в сишном коде - NO WAY.

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

Раньше я нормально себе программировал на С++ который считал Си с ООП.

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

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

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

это не NoWay. Это просто не нужно.

emulek
()

вопрос начинающего водилы - нужно ли знать устройство и принципы ДВС?

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

Идиот. ООП это наименее важная из фичей C++.

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

а писать на ассемблере много и постоянно никто сейчас не будет

Слишком категорично же =)
Думаю, есть такие позиции, где писать придётся в основном на асме и довольно много. Оптимизация мультимедии/компрессии/криптографии/математических библиотек/рендеринга...

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

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

тогда не пиши на C++

Да ладно, бывает поглядишь на код и думаешь: «Осспади...» =)

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

читать не умеешь? operator*() тоже перезагружается (та звёздочка, что НЕ умножение). Нельзя только точку перезагружать.

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

что тут плохого? Это PureC, если что.

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

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

что тут плохого?

Из man 3 printf (OpenBSD):

     It is important never to pass a string with user-supplied data as a
     format without using `%s'.  An attacker can put format specifiers in the
     string to mangle the stack, leading to a possible security hole.  This
     holds true even if the string has been built ``by hand'' using a function
     like snprintf(), as the resulting string may still contain user-supplied
     conversion specifiers for later interpolation by printf().

     Be sure to use the proper secure idiom:

           snprintf(buffer, sizeof(buffer), "%s", string);

PureC

Что ты под этим подразумеваешь?

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

Из man 3 printf (OpenBSD):

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

А в общем случае — да, небезопасно.

emulek
()

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

Напиши на asm обычный резидент который будет ловить кнопки и рисовать морду через int10.
Не в linux конечно. Вот сразу и потренируешься.

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

operator*() тоже перезагружается

эм, вообще-то устоявшийся термин - «перегрузка операторов». Не перезагрузка, а именно - перегрузка.

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

операторы ПЕРЕгружаются, болезненный. overload, а не reload.

vvviperrr ★★★★★
()

Для понимания низкоуровневых штучек, ИМХО, можно и выучить.

Для денег - нет. Деньги нынче модно зарабатывать быстрыми способами и/или выхватыванием кусков/работой локтями.

Если любишь дзен, пробуй, должно доставить.

Программирую на асме форфан, под оффтоп. Под линукс пытался, но не пошло.

Программки на асме работают быстрее и меньше памяти жрут.

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

Есть какая-то признанная классика?

Я курил Абеля и Нортона, но счас это наверное не модно, всё-таки 16 бит.

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

Для понимания низкоуровневых штучек, ИМХО, можно и выучить.

Что ты понимаешь под асм?

Для денег - нет. Деньги нынче модно зарабатывать быстрыми способами и/или выхватыванием кусков/работой локтями.

Еду.

Программирую на асме форфан, под оффтоп. Под линукс пытался, но не пошло.

Мне тебя жаль.

Программки на асме работают быстрее и меньше памяти жрут.

В твоих мечтах. Приучайся писать нормально: «мои недопраграмки на асм работают „быстре“ и „меньше памяти жрут“, чем то говно, что я пишу на сишке».

Ктож виноват в том, что ты писать не умеешь? Ещё и под маздайкой - самый нищий конпелятор, который еле-еле осилил с89.

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

А, я тебя удивлю, но стек уже давно протух, представляешь? Твой call abi тоже, а вообще всё твоё преставление так же протухло и больше не работает. Суть не в том, что это не модно - это не нужно, ибо не работает.

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

Думаю, есть такие позиции, где писать придётся в основном на асме и довольно много. Оптимизация мультимедии/компрессии/криптографии/математических библиотек/рендеринга...

Даже если и придётся что-то писать, это максимум файл-другой, или вообще ассемблерные вставки. «Много» - это сотни килобайт, а не два десятка строк.

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

А эта книга есть где-нибудь в свободном доступе?

Я в дежавю находил.

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

или вообще ассемблерные вставки

Ну разумеется, никто же не будет писать на асме _целиком_.

«Много» - это сотни килобайт

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

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

А в чем может быть срач? Ты будешь меня дальше убеждать, что в процессоре 8086 всего один 16 битный регистрации ах? Или ты хочешь меня там забанить? :)

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

Я на не посылал. А вот в библиотеку бы послал. Ничего не бывает лучше, чем хорошая, годная книжка по теме.

nanoolinux ★★★★
()

(опыт кодинга на с++).
разные принципы оптимизации

Посмотри Eigen как пример оптимизации. Правда там не асм, а intrinsics.

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

Слишком категорично же =)

Нет.

Думаю, есть такие позиции, где писать придётся в основном на асме

Нет, не имеет смысла.

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

Ничего этого нет, а оптимизацией там не пахнет.

Это всё пишется спокойно на сишке, гцц позволяет(хоть и гинерит говно). Либо пишется кодоген на сишке. Пишут на асм либо, ибо по старинке, либо просто не осилили ничего вменяемого.

Сейчас что-то писать на асм никакого смысла нет.

anonymous
()

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

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

А что ещё есть фундаментального по этой теме? Есть какая-то признанная классика?

«Digital Design and Computer Architecture». MIPS с нуля, с конвейром, кешами, и т.д. И есть описание реализации суперскалярности, out-of-order execution, переименования регистров, но не очень подробное.

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

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

И да, оригинально фраза звучит «operator overloading», а вовсе не «operator rebooting» :-). А overload - это перегруженность.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.