Список ресурсов для изучения Ассемблера

    Доброго времени суток!
    Некоторым программистам иногда приходит в голову мысль «а не изучить ли мне ассемблер?». Ведь на нем пишут самые (с некоторыми оговорками) маленькие и быстрые программы, да и охота ощутить вкус низкоуровневого программирования берет свое. Ну и для общего развития не повредит.
    Мысль эта не обошла стороной и меня. Вдохновившись историей одного байта, я ринулся в бой…

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

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


    Для начала




    Ресурсы




    Книги


    Для книг я выкладываю только названия, без ссылок (или с ссылкой на интернет-магазин), так как я не знаю отношения некоторых людей к скачиванию чьей-то интеллектуальной собственности. Кому надо — тот найдет, где скачать.
    • kpnc.opennet.ru — архив книг Криса Касперски
    • Галисеев Г. В. Ассемблер для Win 32. Самоучитель
    • Зубков С. В. Ассемблер для DOS, Windows и UNIX
    • Кип Ирвин. Язык ассемблера для процессоров Intel = Assembly Language for Intel-Based Computers
    • Калашников О. А. Ассемблер? Это просто! Учимся программировать
    • Крис Касперски. Искусство дизассемблирования
    • Владислав Пирогов. Ассемблер для Windows
    • Владислав Пирогов. Ассемблер и дизассемблирование
    • Ричард Саймон. Microsoft Windows API Справочник системного программиста
    • Фрунзе А. В. Микроконтроллеры? Это же просто!
    • Юров В., Хорошенко С. Assembler: учебный курс
    • Абель — Ассемблер. Язык и программирование для IBM PC
    • Эндрю Таненбаум — «Архитектура компьютера» — рекомендация lefty
    • Чарльз Петцольд — «Код» — рекомендация lefty
    • Assembly Language Step-by-step: Programming with DOS and Linux
    • Юрий Ревич «Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера» — рекомендация Ryav
    • Нортон П., Соухе Д. «Язык ассемблера для IBM PC» — рекомендация maotm
    • Григорьев В. Л. «Микропроцессор i486. Архитектура и программирование.» — рекомендация Ghost_nsk
    • Нортон П., Уилтон Р. «IBM PC и PS/2.руководство по программированию» — описана работа с прерываниями и простыми железками, рекомендация Ghost_nsk


    Англоязычные ресурсы




    Инструменты




    Программинг микроконтроллеров




    Прочее


    • zx.pk.ru — форум ZX Spectrum
    • bbs.pediy.com — форум по reverse engineering на китайском языке (спасибо KollinZ). Чтобы можно было понять о чем речь, можно воспользоваться кнопкой «перевести» в хроме (спасибо за совет mexanism)
    • old-dos.ru — крупнейший в Рунете архив старых программ


    Заключение


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

    P.S.: И, да, я очень надеюсь не увидеть в комментариях холивар Assembler vs. %anything% (или «стоит ли изучать ассемблер?»).
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 46
    • +25
      Хочу еще добавить: pediy.com — сайт по reverse engineering'гу язык китайский, но понять можно.
      • НЛО прилетело и опубликовало эту надпись здесь
        • +34
          «Язык китайский, но понять можно» — это пять!
          • +3
            Верит в себя человек. :)
            • +3
              И вправду можно понять, в хроме достаточно кнопку Перевести нажать
            • +4
              Если копаться в интеловских инструкциях, то полезно www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
              Ну и если изучать программы под win, то msdn.
              И ещё общий случай источника знаний — гугл.
              • +3
                Зачем копаться в интеловских инструкциях когда это (и гораздо больше) уже сделал Агнер Фог
                Удивительно что среди стольких ссылок нет одной действительно полезной:
                www.agner.org/optimize/
                • 0
                  аналогичные доки от AMD developer.amd.com/documentation/guides/Pages/default.aspx#manuals
                  P.S. если не ошибаюсь, мануалы от Intel можно заказать себе домой и при том совершенно бесплатно, я в свое время получил здоровенные 6 книг
                  • 0
                    Раньше — да, книги присылали (я один комплект подарил хорошим людям, а один на полке стоит возле настольного компа), но потом стали высылать на CD, поэтому смысла заказывать нет — можно pdf'ки скачать.
                • 0
                  А по SSE можете что-нибудь посоветовать?
                  • +6
                    Интересно, а какое количество таких вот неофитов, вдохновленных историей одного байта в конечном итоге хоть как-то связывают свою жизнь с низкоуровневым програмированием?

                    По теме:

                    1) А где же Абель, классика как-никак? Абель — Ассемблер. Язык и программирование для IBM PC.

                    2) Так же в комплекте с masm32 идет просто отличная подборка хелпов, туторов и примеров — \masm32\{help,tutorial,examples}.

                    3) Уроки Iczelion'а

                    4) Введение в крэкинг с нуля, используя OllyDbg (by Рикардо Нарваха)

                    5) gdb manual / gdb HOW-TO

                    6) На сайте securitytube.net есть 2 неплохих видеокурса:
                    securitytube — Windows Assembly Language Megaprimer
                    securitytube — Assembly Language Megaprimer for Linux

                    • +1
                      Примерно половина из указанных пунктов содержится в подразделах указанных ранее сайтов, но добавил отдельными ссылками. Большое спасибо за дополнение!
                      К теме первого вопроса: не думаю что много. Изучить ассемблер обычно хочется именно для самообразования (как Lisp, хотя некоторые, например я, умудряются писать на лиспе на работе), а не для связывания с ним жизни. Но и пригодиться может — например для вставок в С/С++ код, или для программинга микроконтроллеров в качестве хобби.
                      • +4
                        Приветствую, брат по Lisp. Согласен по всем пунктам. Имею дополнение: знание языков ассемблера для архитектур, для которых пишешь код, бывает незаменимо для детального анализа кода и когда сталкиваешься с багами компилятора. Последнее у меня как-то случилось на работе: мы с напарником писали игру и там был цикл отрисовки объектов на экране, что-то типа этого:
                        for (size_t i = 0; i < OBJECTS_COUNT && objects[i] != NULL; ++i)
                          objects[i]->Draw();
                        
                        objects — это отсортированный массив указателей на рисуемые объекты, если что. И вот, как-то этот код начал глючить — не отрисовывались объекты. Отладили всё это дело вдоль и поперёк, а ошибку не нашли. Вставили отладочный вывод в логи — объекты рисуются, убрали — не рисуются. Более того, прекрасно работал идентичный изначальному код:
                        for (size_t i = 0; i < OBJECTS_COUNT && objects[i] != NULL; ++i)
                        {
                          GameObject *obj = objects[i];
                          obj->Draw();
                        }
                        
                        Заглянули в дизассемблированный код изначального варианта — оказалось, компилятор тело цикла вообще выкинул из кода. Даже если перед отрисовкой поставить бессмысленное
                        int a = 0;
                        
                        то код будет работать.

                        Такие вот дела. Вся эта муть была в VisualStudio 2008, а в VS2010 баг не проявлялся. Без знания ассемблера мы могли искать это не час-полтора, а целый день или дольше.
                        • 0
                          про книжку В.Н. Пильщикова «ASSEMBLER Программирование на языке ассемблера IBM PC» забыли, добавьте и ее
                        • +3
                          И еще, по-моему, перед тем как браться за непосредственно кодинг стоит проштудировать труды Таненбаума, ну как минимум его «Архитектура компьютера».

                          Кому в тягость академический стиль изложения Таненбаума рекоммендую просто отличну книгу Чарльза Петцольда — «Код».

                          Вот тогда можно будет с уверенностью самому себе сказать, что уж если не в деталях, то как минимум в общих чертах, имеешь представление о том, как работает машина.
                          • +2
                            >> Интересно, а какое количество таких вот неофитов, вдохновленных историей одного байта в конечном итоге хоть как-то связывают свою жизнь с низкоуровневым програмированием?

                            Не знающий ассемблера программист на С подобен переводчику не знающего языка с/на который он переводит. Компилятору стоит доверять ещё меньше чем google translate.
                          • –9
                            Хабр — это не закладки твоего браузера.
                            • +9
                              Действительно не закладки, ведь закладки моего браузера не могут прочитать те, кто ищет материал по ассемблеру, и не могут добавить в избранное те, кто возможно будет делать это в будущем.
                              • –5
                                То, что ты не знаешь как выставить закладки твоего браузера на обозрение, не значит что таких сервисов не существует в интернете. Пользуйся ими, а не хабром, это прямо записано в правилах, которые ты читаешь перед началом создания сообщения.

                                Или ты думаешь что пользователи Хабра настолько тупые что не в состоянии воспользоваться Гуглом?!
                            • +1
                              Я просто оставлю это здесь. Для самых начинающих и никакой глубокой системщины.
                              • +2
                                И это, для тех, кому интересно поделать что-то для старого доброго реального режима.
                                • +1
                                  Старый добрый «Земский Фершал»!
                              • +3
                                про микроконтроллеры надо обязательно добавить.
                                это реальная область, где ассемблер реален во всей красе и вариациях.
                                да и то, там уже на высших уровнях, все более менее подогнано под компиляторы языка С.
                                • –4
                                  Извиняюсь что влезаю. Нужно изучить паскаль. Не подскажите какие нибудь хорошие книги, либо ресурсы?
                                  В программировании вообще не разбираюсь, изучить нужно только основы.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                    • 0
                                      Да, сейчас займусь этим. Только проснулся. =)
                                    • 0
                                      win32assembly.online.fr/ же
                                      я на уроках исцелиона учился, самые класные мануалы для школоты
                                      • 0
                                        Уже есть в списке, в разделе «англоязычные ресурсы». =)
                                      • +1
                                        Мне в свое время с лихвой хватило ассемблера Z80 :)
                                        Спасибо Speccy за наше счастливое программерское детство :)
                                        • 0
                                          Внесу и свою небольшую лепту. Не так давно интересовал вопрос «а как же это делают яблоки?», вот тут нашел небольшое введение: http://orangejuiceliberationfront.com/intel-assembler-on-mac-os-x/
                                          • +3
                                            • 0
                                              Я бы добавил еще книгу Юрия Ревича «Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера», сейчас как раз ее читаю :)
                                              • 0
                                                alexfru.narod.ru/emiscdocs.html Подборка доков из теплых ламповых времен.
                                                • +1
                                                  А собственно почему www.nasm.us нет?
                                                  NASM — единственный «православный» асм под PC.

                                                • 0
                                                  Еще книжка есть:

                                                  Название: Язык ассемблера для IBM PC
                                                  Автор: Нортон П., Соухе Д.
                                                  Год: 1993
                                                  Страниц: 352
                                                  Язык: русский
                                                  Издательство: Компьютер
                                                  ISBN: 5-88201-008-Х
                                                  • 0
                                                    Название: Микропроцессор i486. Архитектура и программирование.
                                                    Автор: Григорьев В. Л.
                                                    Издательство: ТОО «ГРАНАЛ»
                                                    Год: 1993
                                                    ISBN: 5-900676-02-1 (Книга 2,3,4 первую найдете)

                                                    4 книги в двух томах. По сути хороший и наверное единственный перевод «Intel Architectures Software Developer Manuals» хоть и в версии на начало 90х, но все что надо там уже есть.

                                                    Нортон П., Уилтон Р. IBM PC и PS/2.руководство по программированию: Пер с англ. -М.: Радио и связь, 1994, -336с.
                                                    Тут все прерывания описаны, и работа с простыми железками.
                                                    • +1
                                                      вспоминаются еще TechHelp и Interrupt List
                                                      • 0
                                                        + x86asm.net
                                                        • 0
                                                          Забыли ещё один ресурс. Сам на третьем курсе делал. Для чайников: www.osinavi.ru/asm
                                                          • 0
                                                            Могу посоветовать еще книги Столярова, хотя это скорее методички, можно скачать на www.stolyarov.info/books/asm_unix. Они по небольшие, но инфа в них есть очень ценная, мне очень помогло. Еще отличная книга Барри Брэя — «Микропроцессоры Intel: 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro Processor, Pentium II, Pentium III, Pentium 4. Архитектура, программирование и интерфейсы» — больше 1300 страниц, рассматривается все досконально.
                                                            • 0
                                                              Я прошу и требую))) хотел просить и требовать добавить бавить SoftIce в список инструментов, но с ужасом увидел, что он не поддерживается начиная с XP SP3. Куда мир катится?
                                                              • 0
                                                                • 0
                                                                  Intel® 64 and IA-32 Architectures Software Developer Manuals — первоисточник Intel. Название довольно туманное, но при ближайшем рассмотрении это именно то, что надо.
                                                                  • 0
                                                                    Как ни странно, но в статье на Луркоморье есть отличные ссылки — добавьте пжлста в общий список «Для начала»

                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.