Форум: Медико-психологические вопросыСам себе юристО Жизни и про Жизнь
Новые темы: 000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

О Жизни и про Жизнь

Выбрать другой skin

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ассемблер. Знаете-ли вы ассемблер ?
 
 автор: Borec   (16.10.2009 в 10:34)   письмо автору
 
 

Ассемблер. Знаете-ли вы ассемблер ?

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

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

Что скажете ?

  Ответить  
 
 автор: cheops   (16.10.2009 в 11:30)   письмо автору
 
   для: Borec   (16.10.2009 в 10:34)
 

>Заинтересовался вследствие того, что неожиданно пришел к мысли, что язык СИ это по-сути
>набор скриптов для того, чтоб с ассемблеровскими командами не заморачиваться.
Официально это называется "C - системный язык программирования", он создавался и развивался как язык, для создания операционных систем и системного кода. Это означает, что в нём имеются конструкции для манипуляции битами и указатели - механизм манипуляции адресами памяти напрямую. А вообще все рано или поздно превращается в код, зачастую даже через промежуточный ассемблеровский код, так что это можно утверждать про любой язык программирования (правда не любой язык программирования позволяет так глубоко и эффективно манипулировать кодом).

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

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

  Ответить  
 
 автор: Borec   (16.10.2009 в 11:45)   письмо автору
 
   для: cheops   (16.10.2009 в 11:30)
 

С этого не требует, покрайней мере сразу - потому он проще и надежнее.

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

Кстати и в "Мере" на собеседовании долбают вопросами: где создается переменная, как реализуется константность, когда создается объект.

  Ответить  
 
 автор: cheops   (16.10.2009 в 12:04)   письмо автору
 
   для: Borec   (16.10.2009 в 11:45)
 

>Дык вот в том-то и дело, что язык СИ начинается там, где идет работа с адресами, сдвиг
>байтов и тому подобная бяка.
Скажем так, этото предметная область C на котором работать с этими вещами проще, чем с использованием любого другого языка. Ассемблер тут не поможет - будет мешать. Тут архитектура компьютера может помочь, но она на мой взгляд в книгах по C освещается достаточно подробно, чтобы приступить к работе.

>Кстати и в "Мере" на собеседовании долбают вопросами: где создается переменная, как
>реализуется константность, когда создается объект.
И правильно делают.

  Ответить  
 
 автор: Borec   (16.10.2009 в 12:17)   письмо автору
 
   для: cheops   (16.10.2009 в 12:04)
 

>>Дык вот в том-то и дело, что язык СИ начинается там, где идет работа с адресами, сдвиг
>>байтов и тому подобная бяка.
>Скажем так, этото предметная область C на котором работать с этими вещами проще, чем с использованием любого другого языка. Ассемблер тут не поможет - будет мешать. Тут архитектура компьютера может помочь, но она на мой взгляд в книгах по C освещается достаточно подробно, чтобы приступить к работе.


Только ответ "нафига это нужно" лежит в понимании принципов компьютерных вычислений и работы ПК вообще, это принципы ассемблера, или я не прав ?


>>Кстати и в "Мере" на собеседовании долбают вопросами: где создается переменная, как
>>реализуется константность, когда создается объект.
>И правильно делают.


Почемуй-та они правильно делают ? Откуда простому прикладному программисту про такое знать ?

  Ответить  
 
 автор: cheops   (16.10.2009 в 12:56)   письмо автору
 
   для: Borec   (16.10.2009 в 12:17)
 

>Только ответ "нафига это нужно" лежит в понимании принципов компьютерных вычислений и
>работы ПК вообще, это принципы ассемблера, или я не прав ?
Не совсем, скорее принципы компьютерных вычислений лежат в основе ассемблера. Да, в книгах по ассемблеру они рассматриваются наиболее подробно, так как там без них вообще край. Однако, ассемблер - это в первую очередь процессор и его архитектура - вы работаете с процессором напрямую. Изменить положение диаграммы, открыть рот, всосать воздух, закрыть рот, разместить газ в лёгких, произвести газообмен, изменить положение диафрагмы, открыть рот, выпустить воздух, закрыть рот. На Си вам все равно какой у вас процессор, файловая система, а иногда даже операционная система - вы просто говорите: дышать, при этом широко открывать рот.

Что нужно знать в Си? Как числа бинарные устроены и как в них отдельные биты менять - это кондовая информатика. То что данные и код внавалку лежат в памяти и программе все равно, на что адресу имеет все, начиная с переменной, заканчивая функцией или драйвером? Можно, конечно, почитать первую главу книги по ассемблеру, можно не по ассемблеру. Только не совсем корректно утверждать, что это ассемблер - для работы на ассемблере это тоже нужно и даже больше, чем на Си. Это просто основы информатики, организации бинарных чисел и архитектура компьютера. Есть множество книг посвященных этим вопросам, но лучше их читать после изучения Си, иначе просто закопаетесь, а для простой и легкой проверки не будет инструмента. В поисках руды лучше землю копать лопатой, чем руками в поисках лопаты.

  Ответить  
 
 автор: cheops   (16.10.2009 в 13:01)   письмо автору
 
   для: Borec   (16.10.2009 в 12:17)
 

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

PS Тем более осваивая Си волей неволей приходится залазить в системную область, даже если в душе прирожденный прикладник. Это плата за скорость и эффективность. Хотите срезать угол - будте готовы за это заплатить сложностью.

  Ответить  
 
 автор: Borec   (16.10.2009 в 13:17)   письмо автору
 
   для: cheops   (16.10.2009 в 13:01)
 

>Да им то какая разница... им заботы нет об устройстве жизни прикладного программиста. Им интересно решение их собственных задач. Им нужен уверенный в своих силах разработчик, которого не пугала бы сама постановка задачи.

А где эту хрень изучить можно ? Да и вообще, где что либо можно изучить ?

>PS Тем более осваивая Си волей неволей приходится залазить в системную область, даже если в душе прирожденный прикладник. Это плата за скорость и эффективность. Хотите срезать угол - будте готовы за это заплатить сложностью.

А сами вы знаете Ассемблер ? Ну вы, например, МК ? Кстати да, в вашей книжке по Си++ все здорово и прикольно, одно не понятно, нафига это надо ?

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

  Ответить  
 
 автор: cheops   (16.10.2009 в 14:41)   письмо автору
 
   для: Borec   (16.10.2009 в 13:17)
 

>>Да им то какая разница... им заботы нет об устройстве жизни прикладного программиста. >>Им интересно решение их собственных задач. Им нужен уверенный в своих силах
>>разработчик, которого не пугала бы сама постановка задачи.
>А где эту хрень изучить можно ? Да и вообще, где что либо можно изучить ?
Уверенность в собственных силах? Это только опытом можно добиться. Почитать конечно можно кое-что, но просто чтение ничего не даст. Нужны победы в области, где вам требуется уверенность - по другому её не заработать.

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

> Кстати да, в вашей книжке по Си++ все
>здорово и прикольно, одно не понятно, нафига это надо ?
Да, это проблема. В книгу невозможно поместить все. Есть книги для обучения, есть методологические книги, есть практические. Когда создается книга - она преследует одну цель (много целей она преследовать не может - иначе получится плохая книга). Мы не ставили целью объяснить область действия и возможности C++ - это другую книгу нужно писать, ориентированную на человека, который C++ знает.

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

> Ну учиться конечно лучше на учебных задачах, во время учебы в ВУЗ, благо чего-чего, а
>времени там навалом.
Что-то не помню, чтобы в ВУЗе было времени навлом :))), на самом деле ВУЗовские задачки не плохие, но реальности они учат не очень хорошо. Если ориентироваться на профессиональную область - лучше как раз сразу браться за реальную задачу - она вам раскачиваться не даст и потребует значительных знаний. Потом, когда знания будут вам попадаться на глаза - вы к ним будете с гораздо большим интересом и вниманием относиться. ВУЗовские задачи такой мощной мотивации лишены.

  Ответить  
 
 автор: Borec   (16.10.2009 в 14:47)   письмо автору
 
   для: cheops   (16.10.2009 в 14:41)
 

Ну незнаю, на дневном я учился на кораблестроителя.

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

Учился в основном по-книжкам, на лекции влом ходить было.

  Ответить  
 
 автор: exp   (16.10.2009 в 12:58)   письмо автору
 
   для: Borec   (16.10.2009 в 10:34)
 

я
, немного изучал :)
Ничего такого особенного правда не написал на нём , но немного понял саму структуру программ под вин32с ,и ещё меньше под DOS и KolibriOS.
Сначала долго думал какой компилятор выбрать , пробовал примеры на tasm nasm masm fasm, ругался на то что так всё усложнили тем что языков ASM так много.
Потом немного уже лучше усвоив что-то из masm , выбрал всётаки fasm, как более на мой взгляд продвинутый, но с меньшим колличеством кода программ и примеров написанных на нём, и с некоторыми недочётами , некоторые из которых уже исправили пока я отладчиком их вылавливал , и ознакамливался с ними :)
Компиляторы ASM это макроассемблеры как их называют, по сути инструмент для того чтобы написать байткод таким каким нужно, но в символах а не в байтах, и ещё предлагается использовать и создавать кучу макросов, чтобы не переписывать одно и то-же много раз.
В fasm язык для создания макросов более на мой взгляд улучшеный, поэтому fasm мне ближе
После ЯВУ (языков высокого уровня) , приходит острая необходимость (как и в Cи тоже) стараться что-то систематизировать, складывать-раскладывать по полочкам по файлам, давать в разных программах одинаковые имена переменным, и вообще стараться как можно меньше держать в голове. А я только ещё начал с простейшего на мой взгляд, с GUI-приложений под вин32 (почти не отличается от того-же на Си, если ещё и точку входа в Си-программе изменить), и всякие mmx, для работы с double-цифрами вообще ещё слабо себе представляю как использовать.
Ещё неплохо-бы найти отладчик или дизассемблер показывающий листинг таким каким он мог-бы быть для fasm, но там не так много отличий , чтобы не понять что в листинге, если программа своя.
Зато после того теперь как немного чего-нибудь попробую сделать на ASM , в другом языке потом резко забывается то что после вызовов функций и утверждений нужно ставить точку с запятой :) но пару дней ошибок немного опять приучают.
Но это я даже и не пытался пользоваться ассемблерами с AT&T-синтаксисом , а только с INTEL-синтаксисом. AT&T (для меня сложнее возможно потому что я его не знаю) обычно в linux-компиляторах для компиляции исполняемых ELF-файлов, как часть GCC (gnu коллекция компиляторов), для многих микро-процессоров типа motorola тоже вроде AT&T является традиционным , всегда имеет значение только байткод, и без разницы на чём написано, если компилятор не дописывает от себя лишнее. иногда даже уже неважно дописывается-ли что-то ненужное или нет
Но это лично у меня сложилось такое впечатление ,) и оно ненавязчивое

// upd
разобраться с типами и с указателями в ассемблере намного проще
там имеет значение только сколько байт что занимает.
В Си на четыре байта названий типа int, HANDLE, ...... целая куча

  Ответить  
 
 автор: cheops   (16.10.2009 в 13:09)   письмо автору
 
   для: exp   (16.10.2009 в 12:58)
 

Я сошел с дистанции ещё раньше, работал только с tasm и masm (в основном с последним). Нет коммерческих перспектив: да, очень маленькие программы, но привязка к процессору, время разработки, сложность и требование высокой квалификации практически исключает пересечение ассемблера и денег. Последнее означает, отсутствие интересных и востребованных задач, позволяющих профессионально развиваться дальше в отрасли.

  Ответить  
 
 автор: Borec   (16.10.2009 в 13:19)   письмо автору
 
   для: cheops   (16.10.2009 в 13:09)
 

>Я сошел с дистанции ещё раньше, работал только с tasm и masm (в основном с последним). Нет коммерческих перспектив: да, очень маленькие программы, но привязка к процессору, время разработки, сложность и требование высокой квалификации практически исключает пересечение ассемблера и денег. Последнее означает, отсутствие интересных и востребованных задач, позволяющих профессионально развиваться дальше в отрасли.

Какие задачи решали ? Как все получалось ?

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

  Ответить  
 
 автор: cheops   (16.10.2009 в 14:26)   письмо автору
 
   для: Borec   (16.10.2009 в 13:19)
 

>Какие задачи решали ? Как все получалось ?
В основном проба на вкус, нужно мне это и если нужно какие задачи можно решать с его помощью. Где-то на форуме PHP валяется, например, Windows-калькулятор, который весит меньше 10Кб - вроде Windows-программа (кнопки, поле ввода), а весит всего ничего. Очень эффектно, но что-то большее будет просто напичкано всевозможными ошибками.

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

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

  Ответить  
 
 автор: Borec   (16.10.2009 в 14:32)   письмо автору
 
   для: cheops   (16.10.2009 в 14:26)
 

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

Да вы что ! На этож тьма времени уйдет ! Откуда оно у работающего человека ?

  Ответить  
вверх
Консультации от известных специалистов и авторов многих книг