LINUX.ORG.RU
решено ФорумTalks

Что подразумевается под знанием ассемблера?

 , , ,


2

3

В ряде случаев от программиста на C (Linux и вообще UNIX-based системы) требуется ещё и знание ассемблера.

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

Deleted

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

уметь приблизительно понимать код на нём в большинстве случаев достаточно, знать основные инструкции

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

о какой архитектуре речь?

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

о какой архитектуре речь?

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

Deleted
()

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

uin ★★★
()

всегда казалось что в линуксе на асм смотрят косо из-за отсутствия переносимости.

upcFrost ★★★★★
()

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

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

что является джентльменским набором в этой профессии.

нет такой профессии.

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

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

шансов устроиться на работу ассемблерщиком у тебя еще лет 10 не будет.

плюсану, да ))

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

А почему всё сразу рассматривается в виде поиска работы? Запрос конкретно про полезные материалы, которые кому-то фактически помогли. Всё остальное за рамками. Т.е. я не прошу корректировать моё понимание ассемблера, профессии или давать обзор рынка труда (хотя никто и не запрещает, пожалуйста). Лучше всего просто: автор - «Название».

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

«Ассемблер в Linux для программистов C». ©

Но только эти материалы должны быть практическими

Asm'ы для разных МК практичны, остальные — для общего развития ©.

quickquest ★★★★★
()

Си спасёт отца русской демократии.

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

Мануал по конкретному ассемблеру и целевой архитектуре.

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

А тебе зачем вообще? Что-то конкретное или просто хотелка распухла?

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

шансов устроиться на работу ассемблерщиком у тебя еще лет 10 не будет

Ну может ему для сопутствующих задач нужно.

Deleted
()

В ряде случаев от программиста на C (Linux и вообще UNIX-based системы) требуется ещё и знание ассемблера

Знание С и ассемблера требуется только и исключительно разработчику ядра. Микроконтроллёрщикам си не обязателен (хотя и желателен), а остальным ассемблер вообще крайне противопоказан.

redgremlin ★★★★★
()

Только рукожопые совки требуют знания ассемблера. Для написание драйвера для Линукс, ассемблер не требуется от слова вообще, например. И более того, требования к стилю программирования в любой нормальной конторе прямо запрещают использование всех этих вещей без крайней на то необходимости. Крайняя необходимость - это, например, необходимость работы без операционной системы. В Linux/Unix же всё API есть. Никакого ассемблера нафиг не надо, ни знать, ни использовать.

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

Конкретно в контексте Linux, таких материалов нет и быть не может, см. выше.

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

А тебе зачем вообще? Что-то конкретное или просто хотелка распухла?

это

Знание С и ассемблера требуется только и исключительно разработчику ядра.

Deleted
()

ассемблер ещё нужен для задействования всяких SSE, AVX и прочих процессорных наворотов для ускорения кодеков и шифрования, активно применяется во всяких ffmpeg и openssl

и ещё в библиотеках для работы с большими числами

Harald ★★★★★
()

можешь потыкать fasm и nasm

Harald ★★★★★
()

Начни с чтения книги «Assembler это просто» О.Калашников. Найдешь всю исчерпывающую информацию и поймешь, что тебе от ассемблера вообще надо. Там даже простенький вирус описано как накодить хе-хе))

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

если я правильно понимаю, то знание асма = понимание как работает машина. По крайней мере, на i8080 у меня именно так и было.

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

Понятно.
Вот здесь человече всё раскладывает по полкам. Пожалуй, подпишусь.
Лично мне асм бывает нужен для очень специфичных вещей, но за них не платят. Это как умереть за Родину. Никто не узнает, не всплакнёт и даже памятник не поставят =)))
По ядру. Дома есть пара книжек по программированию ядра. Одну из них использовал в штучном проекте, вторая так и лежит девственно-чистой. Но асм в проекте не использовал, это точно.

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

Крайняя необходимость - это, например, необходимость работы без операционной системы. В Linux/Unix же всё API есть. Никакого ассемблера нафиг не надо, ни знать, ни использовать.

Ассемблер нужен, чтобы хотя бы иногда понимать во что превращается написанный код. При отладке бывает нужен. Для оптимизации бывает нужен, не на все есть API, а векторные функции (SSE, AVX, AES) до сих пор компиляторы не умеют толком использовать именно как векторные, а не просто пихая инструкции SSE2 вместо x87 FPU, да и x87-й тоже на всю катушку никогда не умели толком.

Вот в обычном x86 и RISC коде человеку трудно тягаться с компилятором.

praseodim ★★★★★
()

Для взрослых ОС асм конечно редко нужен (точней никогда). Но иногда например когда ОС взрослая, а цпу АРМ, надо глядеть в асм-код чего получается на выхлопе конпилятора. Опять же если в u-boot-е свои костыли говнокодишь тоже полезно посмотреть, что и как. Иногда для отладки пару асм команд нужно вкорячить (типа мигнуть чем-нидь)

Ну а для всякой мелкоконтроллерной шелухи, тоже нужно смотреть. А то иногда такая архитектура&компилятор попадется, приходится очень доступно разъяснять ему, что надо делать и при этом контролировать, что там получается (как пример pic17&CC7A).

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

Знание С и ассемблера требуется только и исключительно разработчику ядра.

Открой исходники кодеков и посмотри, как тем нету асма. Или посмотри любой мультимедийный embedded, пусть даже и на современных дохуядерных ARM. «асм никогда в userspace не нужен» только школота рассказывает.

Pavval ★★★★★
()

Намедни я брал на себя роль компилятора и переводил сишную реализацию N-ферзей на один экзотический ассемблер. А потом этим кодом отлаживал Verilog модель в ModelSim. От этой работы готов кого-нибудь покусать в прямом и переносном смысле.

Конкретно по вопросу топика - место, где в Линуксе не обойтись без ассемблера, это реализация библиотечных setjmp/longjmp функций. Архитектурно зависимая вещь.

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

Си спасёт отца русской демократии.

не везде есть си компилятор. Например, у векторных процессоров с этим трудно

cvs-255 ★★★★★
()
Ответ на: комментарий от lenin386

иногда требуется, например для оптимизации использования fpu.

cvs-255 ★★★★★
()

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

Deathstalker ★★★★★
()

Ассемблер нужен когда работаешь конкретно с железкой. Чаще всего это микроконтроллеры (asm51). Или же ломаешь защиту. Дизассемблировать без ассемблера проблематично. А так посмотри статейку https://habrahabr.ru/post/131971/

SergeySVold ★★★★
()

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

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

глянул код фрагмента на асме и офигел от открывшейся тебе порнографии.

Любой код на ассемблере будет казаться порнографией, если он не написан руками (и это тоже не гарантия читабельности).

StReLoK ☆☆
()
Ответ на: комментарий от Sociopsih

Имеется в виду мышление, все таки «программировать» это не руками что то писать, а прежде всего выстраивать программу в голове. У низкоуровневых программистов это выражается в манипуляциях с регистрами, записать такие-то значения по такому-то адресу, такие-то сложить/умножить итд., а на ассемблере какой машины это выразить это вопрос уже вторичный.
Это для них почти то же самое что для высокоуровневых программистов фреймворк изучать. И это я не к тому что это типа «семечки», просто фреймворки это грубо говоря такая же машина с интерфесом для взаимодействия (разве что программная), при этом она может предоставлять как высокоуровневый API для работы с ним так и низкоуровневый (в высокоуровневом понимании конечно; то есть позволять например к себе какие то расширения дописывать).

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