Пользователь
0,0
рейтинг
6 ноября 2011 в 02:34

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

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

… но оказалось, что найти материал по интересующей теме не так просто, как хотелось бы. Посему решено было создать на хабре пополняющийся пост-индекс статей/книг/мануалов/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% (или «стоит ли изучать ассемблер?»).
Антон Самойлов @fader44
карма
143,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (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
      А как же FASM?
      • 0
        Есть в списке.
  • 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
    Как ни странно, но в статье на Луркоморье есть отличные ссылки — добавьте пжлста в общий список «Для начала»

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