Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Categories:

книги: ассемблер

x86-64 Assembly Language Programming with Ubuntu

Неплохая бесплатная книга для знакомства с современным ассемблером. Применима к любому Линуксу, "Ubuntu" ни при чем. Сознательно опускает многое (например, 16- и 32-битные режимы) и за это автора следует похвалить: лучше меньше, да лучше, особенно для новичков.

Вместе с тем, в книге есть лишнее и недостающее. Некоторые главы сводятся к сухому пересказу списка инструкций (например, плавающей точки), это не нужно. С другой стороны, не хватает краткого описания, что такое машинные коды, с несколькими примерами. Хоть что-то следовало сказать про устройство виртуальной памяти. Некоторые главы сделаны на неправильном "уровне абстракции". Глава про multithreading зачем-то объясняет, как вызывать pthreads, вместо того, чтобы построить пример на системном вызове clone(). Похожим образом глава про аргументы коммандной строки зачем-то использует C-шную конвенцию main(argc,argv) и для этого требует от читателя линковать пример с помощью gcc, а не ld (и не объясняет, почему, чистая магия выходит). Лучше было объяснить, что такое ABI, и брать аргументы по нему.

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

Из обсуждения книги на HN я узнал любопытную деталь. Инструкция NOP (машинный код 0x90) "на самом деле" по своему коду расшифровывается как "xchg eax, eax" (это я знал). Но с переходом к 64 битам пришлось кое-что подправить в консерватории, потому что 32-битные операции вообще говоря обнуляют верхние 32 бита 64-битных регистров, но мы не хотим, конечно, чтобы NOP обнуляла верхнюю половину RAX. В результате 0x90 официально переосмыслили как NOP, не имеющий отношения к XCHG; если очень хочется сделать "xchg eax, eax", можно сделать это через другую форму инструкции, начинающуюся с 0x87 и занимающую два байта. Но например 0x91 остается сокращенной формой "xchg ecx, eax", 0x92 это "xchg edx, eax" итд., и они все обнуляют верхушки 64-битных регистров. А 0x90 не обнуляет, особь статья.
Tags: книги, программирование, прочитал
Subscribe

  • книги: worth the candle

    Завтра выйдет последняя глава одной из лучших книг, что я читал в последние годы, веб-романа Worth the Candle. Если в двух словах, а на большее…

  • зона

    Перечитываю "Зону" Довлатова, и как-то не могу абстрагироваться от его стилистического ухищрения. Не все, должно быть, знают об интересном принципе…

  • книги: child of the sea and the stars (англ.)

    Недавно прочитал отличный фантастический роман (по-английски): David Given, Child of the Sea and the Stars Прямая ссылка на файл, MOBI-версия:…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 34 comments

  • книги: worth the candle

    Завтра выйдет последняя глава одной из лучших книг, что я читал в последние годы, веб-романа Worth the Candle. Если в двух словах, а на большее…

  • зона

    Перечитываю "Зону" Довлатова, и как-то не могу абстрагироваться от его стилистического ухищрения. Не все, должно быть, знают об интересном принципе…

  • книги: child of the sea and the stars (англ.)

    Недавно прочитал отличный фантастический роман (по-английски): David Given, Child of the Sea and the Stars Прямая ссылка на файл, MOBI-версия:…