Зачем вообще изучать assembler?

comrade зачем вообще изучать assembler? Alar Например, чтобы разбираться как работает процессор. Ассемблер - это машинные коды преобразованные в символы, т.е на ассемблере ты можешь управлять работой процессора, обратиться к любому байту памяти и т.д. execom Asm нужно учить что бы не догадиваться, а знать Я в ассемблерах туговат и мне за это наиболее стыдно
7 ответов

comradeНапример, чтобы разбираться как работает процессор.не факт, что изучив асемблер станет понятно как работает процессор: из этих знаний не становится ясным, напимер, как в суперскалярной архитектуре могут обработаться до двух инструкций за такт, каким чудом в этих параллельных, одновременно работающих конвеерах, осуществляется предсказание направления ветвлений, как работает дешифратор команд, используется кэш и многое другое. Ассемблер - это машинные коды преобразованные в символы, ну, можно это и так назвать... т.е на ассемблере ты можешь управлять работой процессора,а оно надо - управлять работой процессора? для программиста важнее управлять ходом выполнения программы а инструкции управления работтой процессора вроде инициализация FPU или проверки наличия ожидаемых немаскированных исключений компилятор сам расставил где надо, причем, в отличии от человека ни разу не забудет. обратиться к любому байту памяти и т.д.а это и из "с" можно. указатели еще никто не отменял на мой взгляд асемблер нужен только всяким там крякерам - jnz на jz заменять там где надо, штоб программа пароль не спрашивала, или тем, кто программирует микроконтроллеры какие нибудь(но там очень списифический ассемблер нужен). ну или еще ради развлечения - кто то Дашкову читает, кто то асм для х68. практическая польза правда от этого почти одинаковая. но писать на нем прикладные програмы - крайний изврат. а для понимания что к чему - достаточно разок прочитать чего нибудь обзорное про фон неймановкую архитектуру и описание инструкций х86 процессора, страниц так на 15 - 20, а не учить и не забивать себе голову всякой мутью Я в ассемблерах туговат и мне за это наиболее стыдно зря ты так, не комплексуй по этому поводу. лучше про ооп знаний наберись, если их конечно еще нет, и про патерны проектирования execom Одно я могу сказать совершенно точно, есть область бесспорного применения Asm где довольно трудно определить номера два, но апсолютно очевидно что Asm - номер один - это компьютерная вирусология! Капитальнй вирь с принципом заражения например как у Satana невозможно сделать не на чём кроме Asm! И что бы ты не говорил, а Asm рулит! В этом году летом был обнаружен первый 64 разрядный вирус - написан на Asm! Я уверен что есть и дручие задачи и возможности которые без Asm не доступны! Например если в языке программирования нет чего-то очень нужного, то можно либо подучить новый язык, либо быстренько оформить ассемблерную вставку! Да и по скорости размеру и оптимизированности кода с ассемблером тягаться не кому! Большинство драйверов имеют в своём составе проги на Asm, для создания Windows так же не обойтись без Asm! И этот список можно продолжать далеко уходя за рамки 4Кб сообщения! zetrix Вот сейчас я в универе своём как раз начал изучать ASM. Для чего преподают его мне я без понятия. Почему я его изучаю? Вот почему: 1) Очень много вирусов написаны на ASM, а значит зная ассемб легче с ними справится; 2) Все декомпиляторы выдают ассемблерный код, чтоб в нём разобраться надо знать ASM; 3) Ну и хотябы... пример вот: как узнать частоту процессора? Посмотреть в реестре - глупый ответ! Нормально можно узнать только в ассемблере. (мне когда-то надо было, более лучшего решения я не нашёл) 4)Ассемблерный код поддерживают практически все языки программирования. 5)Никакой WinAPI не сравнится с компактностью ассемблера (обычная пустая форма в ASM весит 5 кб, в С/С++ 10-15 кб, в делфе - 16 кб) 6)Ну и для саморазвития конечно. Есть конечно минусы - не очень наглядный код...


comrade вирусы писать - баловство это всё. польза от этого сомнительная. психиаторр лучше меня расскажет что творится в голове у людей, которые этим занимаются. а что касается того что справться с вирусами - так лучше помогут знания того как запустить касперского, чем знания асма. к примеру для меня проблемма вирусов не столь актуальна - не заводятся они у мея по чему то. сейчас вжнее проблеа различных сетевых червей, но и для их авторов знание асма не на первом месте -гораздо важнее четко знать современные сетевые протоколы, знать уязвимости и ошибки в существующем ПО, уметь их найти, асм тут ни пири чем, обычно достаточно каких то скриптовых языков. Я уверен что есть и дручие задачи и возможности которые без Asm не доступны с этим согласен. только задач таких мало и подавляющее большенство программистов ими не занимаются например без знания асма нельзя написать даже простейший компилятор, но тут опять на первый план выходят знания того как вообще работают компиляторы, как текст прогаммы разбирается на лексемы, как потом это всё используется. но можно написать компилятор, который компилирует в "псевдо асемблер" - даже не совсем асемблер, такой, процессоров для которого не существует, и эта задача порой бывает посложнее чем из этого "псевдо асма" переводить в машинные коды конкретного процессора. Все декомпиляторы выдают ассемблерный код, чтоб в нём разобраться надо знать ASM;а это тебе зачем? ты крякер? ;-) сообщение "зарегистрируйте вашу копию" жить мешает? Ну и хотябы... пример вот: как узнать частоту процессора? Посмотреть в реестре - глупый ответ! Нормально можно узнать только в ассемблере. (мне когда-то надо было, более лучшего решения я не нашёл)расскажи, если не секрет, как это ты делал? CPUID пользовал или RDTSC? и кто тебе сказал что можно узнать только в асемблере? а WMI для этого не катит? а там ведь можно посмотреть и производителя и степпинг и какой частоты прцессор и до какой он разогнат, и сколько в ём кэша и тд и тп WMI - практика применения в Delphi http://www.megalib.com/books/461/mastering/wmi.htm если интересно... 4)Ассемблерный код поддерживают практически все языки программирования. ну что ты такое говоришь? как это языки его могут поддерживать? как например в с#, java, hph, haskel, smalltalk использовать асм? в с++ ито нельзя асм пользовать! поддерживают асм только некоторые реализации языков, а не сами языки. в turbo c++ (царство ему небесное) можно было , например, написать #pragma inline, а затем asm { move ax, bx; bla bla bla } а вот в gcc или в каком нибудь другом стандартном компиляторе это в жизни не скомпилируется. обычная пустая форма в ASM весит 5 кб, в С/С++ 10-15 кб, в делфе - 16 кбптотому и весит 5 кб, что пустая (можно, кстати и поменьше зделать) а в дельфе - посмотри иерархию классов этой формы в учебнике по делфи - и всё что ты там найдёшь в этой форме реализовано. правда не используется. но кому нужна пустая форма? а когда решишь зделать проектик немного посерьёзнее пустой формы(какой ниюбудь не сложный векторный редактор к примеру) то скоро размеры практически сравняются. вот только разаработка на асме займёт на порядки больше времени, чем на языке высокого уровня. а если через пол годика тебе обязательно надо будет внести изменения, добавив новую функцианальность, например, то почитав исхоники на асме ты либо застрелишься либо перепишешь всё заново. а если уж так хочется писать программы с очень маленьими экзешниками - набери в яндексе "delphi KOL MCK" - там тебе помогут! и 5кб тебе покажутся слегка многовато для пустой то формы. 6)Ну и для саморазвития конечно.ну, с этим не поспоришь


rpy3uH безполезный спор и этим всё сказано!!!!! ассемблер это ассемблер На ассемблере ты сам всё оптимизируешь, а компиляторы это вообще не умеют (даже компилятор вашего любимого с++) В .NET нет ассемблера, там промежуточный код который интерпретирует Framework а framework специально сделан для той систтему и для того компа на котором она установлена теперь програмистам не надо будет заботиться на для какой системы писать потому что .NET программы будут работать на любом компе главное чтобы framework был Скоро все про асм забудут - будет .NET и всё языки будут совместимы и крэкинга не будет и вирусов меньше станет потому что .NET программу очень трудно заразить и взломать потому надо будет знать промежуточный код. to alar: к любому байту памяти (виртуальной памяти) можно обратиться и в delphi, c++ тем более к ЛЮБОМУ байту ты не обратишься ты можешь обратится только к зарезерыированной памяти тем более если к ней открыт доступ и тем более в диапазоне только 00010000h-7FFFFFFFh comrade ту грузн: а я и не спорю о том что асемблер это асемблер или не асаемлер. я просто утверждаю, что большенству программистов он совершенно никчему, а целые приожения на нём писаит - вообще ересь На ассемблере ты сам всё оптимизируешь, а компиляторы это вообще не умеют а ты в этом уверен? или просто так думаешь? наприер Intel C++ Compiler, особенно последних версий, оптимизирует так что сам ему позавидуешь: и циклы разворачивает там где надо и функции инлайнит и сбор общих выражений производит и эквивалентные преобразования и удаление избыточных операций чтения/записи памяти и слияние внутреннего цикла с охватывающим и расщепление о индивидуальному условию и разрыв статически неразрешенных зависимостей по памяти итд итп. сам так без профайлера и многих часов бдения даже над небольшим куском кода низачто не сделаешь ибо человеку свойствено ошибаться... а про дотнет (хотя при чем дотнет в этом топике?) по моему ты не совсем прав: промежуточный код не интерпретируется а компилируется JIT - компилятором в нативный код, а затем исполняется. .NET программы будут работать на любом компе главное чтобы framework был Скоро все про асм забудут - будет .NET и всё языки будут совместимы и крэкинга не будет и вирусов меньше станет потому что .NET программу очень трудно заразить и взломать потому надо будет знать промежуточный код. в том то и дело что .net никогда не будет работать на всех компьютерах именно по тому что framework на всех компьютерах никогда не будет: кроме windows есть и linux и macos и solaris, z-os и др оси, которые прочто занимают свои ниши и дотнета там никогда не появится. а что касается взломать написанное на .net - так там вообще из промежуточного кода (msil) текст программы можно практически в первозданном виде получить, если по нему до этого обфускатором не прошлись. а про асм никогда не забудут - у него есть свои области применения. только вот они очень небольшие и не нужны всем подряд.


Alar У меня появился ещё один пункт - ассемблер нужно немного знать затем, чтобы знать зачем он нужен, для чего его придумали, чтобы знать эволючию развития языков программирования. Также нужно иметь представление о ассемблере для того чтобы радоваться, что есть Delphi и другие языки программирования более высокого уровня. Сам я пишу на Delphi. и по мере появления новых задач изучаю что-то другое. Если будет необходим ассемблер, я его досконально изучу. как вы думаете прав я? или всё же нет? execomСам я пишу на Delphi. и по мере появления новых задач изучаю что-то другое. Если будет необходим ассемблер, я его досконально изучу. как вы думаете прав я? или всё же нет?Я думаю что нет смысла вне очереди забивать себе мозги всякого рода филькиной грамотой, а учить нужно только по мере необходимости тогда! Я думаю ты прав. Virtsonдля того чтобы радоваться, что есть Delphi и другие языки программирования более высокого уровнявот - да, примерно так я тоже хотел написать а еще от изучения Asm "умный человек становится умнее, дурак - дурнее, а с большинством ничего не происходит" ..


zetrixа про асм никогда не забудут - у него есть свои области применения. только вот они очень небольшие и не нужны всем подрядРазвёл спор и сам ответил на него... comradeРазвёл спор и сам ответил на него...ну и что здесь такого? как говорят, в спорах рождается истина. я привожу здесь свои утверждения, кто то пытается их опровергнуть, одновременно, высказывая свои мысли. происходит некое подобие обмена опытом, возможно кто ни будь по-новому посмотрит на вещи о которых казалось бы сложилось устойчивое мнение. с той же убедительностью я могу доказывать что знания ассемблера просто необходимы каждому программисту, но я не говорю тут что "асм надо учить по тому что это круто" или "асм это гавноязык и знать его не зачем", а пытаюсь аргументировать свои слова. а не услышав здесь неоспоримого ответа на вопрос заданный в самом начале попытался сам на него ответить имха если кто то не уверен в нужности и полезности спора - лучше сразу уклониться rpy3uH to comrade: ты говорил что фреймворк попрёт не везде - он попрёт везде где только можно : специально разработают фреймворк для линукс, специально разработают фреймворк для macos, z-os даже для menuetos и всё будет пучком execomне услышав здесь неоспоримого ответа на вопрос заданный в самом начале попытался сам на него ответитьХитро ты придумал! А вообще я считаю, что тема полностью раскрыта и дальнейшее обсуждение - это переливание из пустого в порожнее. И неоспаримых аргументов,я думаю, то же было предостаточно!


comradeспециально разработают фреймворк для линукс, специально разработают фреймворк для macos, z-os даже для menuetos и всё будет пучком для линух уже почти разработали. mono называется. правда там реализовано было не всё (gui и того не было) но ms наехала на этот проектик, дескать нарушают авторские права и проектик быстро загнулся. для макос не знаю может быть (хотя тоже сомнения есть: apple ни к чему прибыль с микрософтом делить). к z/os IBM .net близко не подпустит - у IBM для неё свои решения есть не хуже. бизнес есть бизнес. а если в миньетОС дотнет запихнуть то эта ось быстро потеряет смысл заложенный в неё создателями - что это за дело если в ос целиком написанной на асме будет крутиться практически виртуальная машина? все плюсы сойдут на нет - и медленной станет и раздуется до неприличных размеров. тем более эта любительская ос врядли когда либо станет промышленной - сильно она до них не дотягивает. да и сама майкрософт чтото не очень стремится .net на другие оси портировать. если бы хотели давно б уже сделали а не вставляли бы палки в колёса тем кто ето сам пытается асилить. А вообще я считаю, что тема полностью раскрытасогласен. только что так возмужаться то? ну потрепались чуток. кому мешает? не нравится или не можешь внятно аргументировать свои ответы - не читай, а тем более не сам сюда не лазий отвечать. zetrix Хм... MS скорее всего не даст возможности .net для других ОС. А для чего это им? Так объявили стандарт .НЕТ и всё и только для винды, следстивие т.к. большинство юзеров с виндой, то прогеры будут писать по .НЕТ следовательно юзеры видя что другие ОС не держат .НЕТ будут брать винду (хочется же юзать новые проги!). Таким образом по моему мнению давать возможность реализации технологии .НЕТ на других осях - убыток для MS. Лично я только по этому не хочу переходить на использование .НЕТ, но что делать если ты программист и не хочется работу терять - придётся адаптироваться под .НЕТ Сейчас это не часто требуют, так что пока я думаю не стоит сильно волноваться, но задуматься можно... rpy3uH .NET СПЕЦИАЛЬНО сделана для того чтобы .NET программы пёрли на всех системах!!!!!!!! в этом СУТЬ, в ЭТОМ СУЩНОСТЬ этой технологии , именно для этого она и разрабатывалась!!!! просто MS надо чтобы фреймворки разрабатывала только она!!!!!!!!zetrix 2rpy3uH Как ты думаешь MS сделает фреймворки для ругих ОС? rpy3uH а куда она денентся это и есть её цель именно для этого и разрабатывась технология .NET comradeХм... MS скорее всего не даст возможности .net для других ОС. А для чего это им? Так объявили стандарт .НЕТ и всё и только для винды, следстивие т.к. большинство юзеров с виндой, то прогеры будут писать по .НЕТ следовательно юзеры видя что другие ОС не держат .НЕТ будут брать винду (хочется же юзать новые проги!). Таким образом по моему мнению давать возможность реализации технологии .НЕТ на других осях - убыток для MS. Лично я только по этому не хочу переходить на использование .НЕТ, но что делать если ты программист и не хочется работу терять - придётся адаптироваться под .НЕТ Сейчас это не часто требуют, так что пока я думаю не стоит сильно волноваться, но задуматься можно... как говорится +1; полностью согласен. просто MS надо чтобы фреймворки разрабатывала только оначто то за 6 лет они так ничего и не разработали. более того, даже не сообщили о том что собираются.


скоро на каждом компе будет фреймворк и почти все порграммы будут на .net скоро почти все программы будут контролироваться точно так же как и контролируется выполнение Javascript в Opera