Решён
Есть ли смысл изучать ассемблер по старым книгам?

Игорь Белоусов C/C++
3.2k
7

Нашел у отца "Программирование на языке ассемблера для IBM PC" Питера Абеля (издание 1992 года) и Зубкова "Assembler для DOS, Windows и Unix". Хочу понять как все работает на низком уровне, потому что пишу на C++ и хочу лучше понимать что происходит под капотом.

Насколько эти книги вообще применимы сегодня? Там ещё 16-битные примеры под DOS. Или лучше найти что то современное по x86-64?

Решение
67
Эксперт • 1 ответ

Для понимания концепций - да, смысл есть. Для написания реального кода - нет.

Абель и Зубков объяснят тебе что такое регистры, стек, прерывания, сегментная модель памяти. Концепции не устарели. Устарели конкретные инструкции (16-битный режим, int 21h для DOS, сегментные регистры в том виде в котором они описаны).

Читай их для понимания идей. Параллельно смотри Modern x86 Assembly от Kusswurm или Agner Fog's optimization manuals - это актуальный x86-64. Два источника дают разные уровни понимания и прекрасно дополняют друг друга.

Аватар Максим ДТП

Agner Fog - это прямо золото, особенно его microarchitecture manual. Добавлю: там же на сайте лежат таблицы инструкций по латентности для всех современных процессоров. Незаменимо для оптимизации.

44
Эксперт • 2 ответа

Читал Зубкова в универе. Хорошая книга для своего времени, но ты там половину времени будешь разбираться в реликтах DOS-эпохи которые тебе никогда не пригодятся. Потраченное время можно было потратить эффективнее.

Если цель - понять что C++ компилятор генерирует и почему - лучше сразу открой Compiler Explorer (godbolt.org). Пишешь функцию на C++, видишь asm output под x86-64 в реальном времени. Это в 10 раз практичнее любой книги.

29
Эксперт • 1 ответ

Смотря что ты называешь "смыслом". Если хочешь писать оптимизированные SIMD-ядра под современный железо - старые книги не помогут вообще никак, там нет SSE/AVX и близко. Если хочешь понять как работает вызов функции, что такое calling convention, как устроен стек фрейм - Абель вполне справится, концептуально ничего не изменилось.

Я бы добавил ещё одно соображение: для C++ разработчика полезнее не писать asm руками, а научиться его читать. Это разные навыки. Для чтения - любой источник подойдет как точка старта, потом практика на godbolt.

15
Эксперт • 2 ответа

В 2003 году я читал Зубкова вот с такими же целями, тогда это было актуально и практично. Сейчас те же книги дадут тебе базу, но колоссальный пласт современного ассемблера - SIMD, многоядерность, TLB, кеши L1/L2/L3 и их влияние на производительность - там просто не существует.

Читай, но с пониманием что это исторический документ. Хороший исторический документ.

18
Участник • 1 ответ

Хм, а вот я бы поспорил с теми кто говорит "только читать asm, не писать". Ручное написание хотя бы простых функций на asm - это опыт который ты не получишь просто глядя на вывод godbolt. Ты начинаешь физически ощущать почему компилятор делает те или иные выборы. Это другой уровень понимания.

1
Участник • 1 ответ

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

21
Эксперт • 1 ответ

Та же задача стоит у меня. Взял Randall Hyde "Art of Assembly Language" - современная, под x86-64, и есть бесплатная онлайн версия. Плюс OSDev wiki для практического контекста. Старые книги отца оставил для исторического интереса.

Написать ответ

Премодерация гостей

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

Будьте вежливы и соблюдайте правила платформы.