С чего начать изучать Assembler

Тема в разделе "WASM.BEGINNERS", создана пользователем sledopitx, 20 янв 2018.

  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    sledopitx,

    > Я прекрасно понимаю, что вам всем прикольно прикалываться с меня...

    Это не так, тут хороший ресурс и ваш вопрос может полноценно быть рассмотрен, каким бы он глупым не был.

    Вы не понимаете главного. Асм уровень не является языковым. Точнее как язык асм компилеры примитивны. Вы можите весьма быстро изучить фундамент архитектуры, но это всё бесполезно вне ОС. Асм уровень - это знание одновременно обоих архитектур и понимание принципов работы. Когда вы например двигаете мышь срабатывает очень много системных механизмов, уровень асм - это понимание этих механизмов. Изучить(точнее заучить, без понимания) базовую систему команд 86 можно за часы. Но это бессмысленно.
     
    betrayer нравится это.
  2. sledopitx

    sledopitx New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2018
    Сообщения:
    10
    А что Вы подразумевали под термином "барыжить" (в сообщении указанном выше)?
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    sledopitx,

    > что Вы подразумевали под термином "барыжить"

    Вашу мотивацию. Она не изменилась кстате. Если вы думаете что тут люди не понимают цели(как и суть) блэк вопросов, то вы глубоко ошибаетесь.
     
  4. sledopitx

    sledopitx New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2018
    Сообщения:
    10
    Можете описать мою мотивацию со стороны, т.е как она видится Вам? Извините за столь настырную просьбу.
     
    Indy_ нравится это.
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    sledopitx,

    Не уверен что это нужно. Меня за это могут заблокировать на какое то время. Зачем вы это спрашиваете, полагаю что вопрос ваш - самодиагностика, тоесть вам нужна помощь, чтобы разобраться в себе, определить мотивацию - цели и сформулировать задачи. Тогда почему вы сразу это не сказали, а тратили время своё и других. Скажите во первых сколько вам лет, это был ключевой вопрос. Нет смысла скрывать возраст, он элементарно становится понятен по вашим ответам.
     
  6. zerodawn

    zerodawn Member

    Публикаций:
    0
    Регистрация:
    16 янв 2018
    Сообщения:
    94
    Делаем ставки.

    13-16 лет ему.

    P.S. Оффтоп. Инде, посоветуй че почитать годное по когнитивной психологии
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    кажется я понял, что это за песонаж (см инфу в профиле).
    В бан.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    TermoSINteZ,

    Зачем же сразу банить, пусть ответит, мне например интересно.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    zerodawn,

    > Инде, посоветуй че почитать годное по когнитивной психологии

    У вас огромная площадка в виде людей, на которой можно это всё изучать и отрабатывать :preved:

    КГ не есть способ дурить голову кому то, это понимание во первых своего понимания(кгс). Только так наступает ясность. И только таким путём можно выяснить суть. Человек может находится в заблуждении и не понимать это, в таком случае ему нужна помощь.
     
    Последнее редактирование: 21 янв 2018
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    sledopitx, начните с простого - с туториалов. Не с книг, где вы мало что поймёте, а именно с простых туториалов, где быстро виден результат. Остальное изучите по мере.
    Рекомендую туториалы с бывшего fasm.su. В них есть ошибки, но вы с самого начала пишете GUI-приложение, знакомитесь с синтаксисом и WinAPI, основными инструкциями - без лишнего размусоливания. Идеально для новичков и тех, кто ассемблер видит впервые.
    Ссылочка на туторы: https://www.dropbox.com/s/7675m9sgg8orneh/FASM.SU Lessons.rar?dl=0
    Используемый ассемблер, как вы уже поняли, FASM (и сейчас я рекомендую именно его как основной ассемблер, а ml64 - для интеграции в сишные проекты): http://flatassembler.net
    Отладчик - разумеется, x64dbg: https://x64dbg.com/#start
    IDE - FASM Editor 2.0: http://asmworld.ru/instrumenty/fasm-editor-2-0/
     
    Mikl___ нравится это.
  11. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Ассемблер начинается с изучения единиц и нулей. Почти как изучение калькулятора. Было время, когда не было персональных компьютеров, а калькуляторы стоили дорого. Калькулятор, простой или инженерный, нужен, чтобы человек мог складывать, умножать, делить, затем производить более сложные операции. Ассемблер переводит комбинации команд, в комбинации единиц и нулей. Что и есть программа. Ассемблер это компилятор, который позволяет осуществлять операции, сложение, деление, умножение. Но для операционной системы, это всё программный код, выполняющий конкретные команды, если их выполнение предусмотрено. Ассемблер полностью зависит от операционной системы. Язык высокого уровня, работает медленнее, а низкоуровнвый язык быстрее. Ассемблер считается быстрее, потому что передаёт операционной системе команды, в виде единиц и нулей. В первом случае, как будто человек сначала вводит данные в калькулятор, а потом получает результат, то есть тратит какое то время, во втором случае, как будто человек загружает сразу сохранённую команду, то есть результат, без необходимости её ввода, это очень удобно. Так как человек не может производить какие то операции в уме, а также для облегчения понимания этих команд, в ассемблере вместо цифровых команд, используются мнемоники, простейшие типы команд, отражающих их смысловое значение, как сложение, вычитание, умножение, деление, etc.
     
    Последнее редактирование: 22 июл 2018
  12. aptyp

    aptyp Member

    Публикаций:
    0
    Регистрация:
    17 сен 2008
    Сообщения:
    81
    Кстати, если что, C++ это фактически ассемблер, по текущим меркам вычислительной производительности современных компьютеров.
     
  13. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Да, можно сразу IL тогда изучать, нафиг кому сдались эти такты-байты. Net Framework наше все *sacrasm со слезами на глазах*
     
    betrayer нравится это.
  14. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Скорость программ зависит не от языка, а от алгоритмов. Современные компиляторы намного лучше оптимизируют код, чем ты напишешь на чистом асме, а JIT-компиляторы оптимизируют код именно под твоё железо, и можно встретить алгоритмы на шарпе, обгоняющие те же алгоритмы на плюсах.
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

    Вы бредите. Обьясню почему. Недавно была тема на кряклабе по оптимизации, там тоже самое утверждали что и вы безосновательно. Мол компилер оптимизирует код. На самом деле компилер использует макросы, транслируя через них. Там были профайл тесты. Люди которые такое утверждали дошли до абсурда, привели в пример гуглохром, мол он на сишке написан. Но сравнить то несчем, всё относительно.

    Реально же никакой оптимизации для компилера не существует. Он тупо транслирует по заданным таблицам. Только человек может изменять логику, алгоритм. Поэтому уверенность(упоротость") в том, что компилер что то оптимизирует - не соотвествует реальности. А это есть не что иное как бред.

    Вы не найдёте скриптовую конструкцию, которую я не смогу оптимизировать используя асм, это невозможно.
     
  16. superakira

    superakira Guest

    Публикаций:
    0
    lol тс уже наверное про этот форум забыл
     
    UbIvItS нравится это.
  17. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Но речь же не о том, что компилятор умеет нечто, что нельзя сделать на ассемблере, а о том, что в большинстве случаев компилятор для одинаковых логических конструкций выберет более оптимальное решение. Банальный пример - реализация switch-case'ов. Табличный вариант с О(1), который выберет компилятор, против цепочки cmp..je с О(n), которую в большинстве случаев напишет программист на ассемблере. Не говорю уже про автовекторизацию и разворачивание циклов. Всё это можно сделать и руками, но затраты времени на такие оптимизации сделают бессмысленным продолжение разработки.

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

    И эту же мысль справедливо пытаются донести на экселабе.

    И я не спорю, что в отдельных случаях реализация на ассемблере/интринсиках превзойдёт по скорости реализацию, предложенную компилятором, но это частные случаи, в которых программист точно знает, что именно ЭТА последовательность инструкций будет быстрее.

    Что касается примеров профайла: уверен, что любой кодек с ассемблерной шлифовкой с огромным отрывом обойдёт любой чисто сишный вариант, потому что это те самые случаи, когда программисты умнее компилятора.
     
    Последнее редактирование: 25 июл 2018
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HoShiMin,

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

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

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

    Он билдит элементарные макро конструкции. Обычно даже всегда цепляет всякий ртл мусор, который нужно удалять вручную. У меня в дизасмах всех дерьмо типо кучи msvcrXX. Так что ни о какой оптимизации речи быть не может.
     
  19. python4

    python4 New Member

    Публикаций:
    1
    Регистрация:
    25 май 2018
    Сообщения:
    8
    всё прекрасно управляется ключами, на выходе - чистый код.
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    А теперь напишите это на CUDA и сравните скорость. Вы сильно удивитесь почему switch так тупит )