Чи є канонічна книга про збірку x86? [зачинено]


25

Книг про складання багато. Однак вони зазвичай мають справу з ISA, щодо яких я не переймаюся, наприклад, MIPS або ARM. Я не маю справу з цими архітектурами; у мене немає причин намагатися їх вивчити.

Але схожі книжки x86 здаються ... відсутніми.

Скажімо, наприклад, я намагаюся створити компілятор іграшок, що генерує файли Windows Portable Executable.

Чи є там книга, яка є фактичним стандартом для опису найкращих практик, методологій проектування та іншої корисної інформації про складання x86? Що з цією книгою робить її особливою?


Скільки у вас досвіду складання? Ви коли-небудь намагалися використовувати GCC без оптимізації для складання простих програм С на збірку, а потім зворотну інженерію коду назад до програми C?
Брайан

10
@Brian: Мені потрібно було б знати збірку, перш ніж мати можливість це зробити.
Біллі ONeal

Я бачив копію набору інструкцій x86. Це 2 томи і, мабуть, найбільша книга, яку я коли-небудь бачив. Веселіться :)
AngryBird

2
Біллі, Якщо ви взагалі не знаєте жодної збірки, то будь-яке з них було б непогано почати з того, щоб отримати загальні ідеї. Збірка надзвичайно близька до архітектури, тому інструкція по збірці значно відображає конкретні архітектурні конструкції. Я почав із складання x86 і прочитав "Мова збірки для комп'ютерів на базі Intel" Кіпа Ірвіна. Книга насправді поєднувалася з онлайн-класом у громадському коледжі. Я не впевнений, який ти навчається, але я вважаю, що керовані інструкції найкраще підходять для навчання.
Брайан

@Brian: Що ви маєте на увазі під «будь-яким із них»? Я не розумію, що таке "їх" - будь-яка книга? Будь-який асемблер? Будь-яка ISA? Я вже грав з асемблером MIPS; Я нічого не можу знайти на x86.
Біллі ONeal

Відповіді:


18

Я використовував мову асамблеї для процесорів x86 як підручник, коли я навчався в коледжі, і мені було дуже зрозуміло. У мене є старше четверте видання і порівнювало його з шостим виданням, і я не помітив великих змін, тому ви, мабуть, могли підібрати старішу копію дешево. Люди скаржаться на його використання власної бібліотеки для вводу-виводу, але він розповідає, як це зробити "важким" способом в останніх розділах.


1
Дуже гарна книга!
Кодер

Я прочитав 5-е видання книги Ірвіна, коли вона мала назву "Мова збірки для комп'ютерів на базі Intel". :)
Брайан

1
Я думаю, що це досить погана пропозиція, оскільки більшість другого видання стосується власної езотеричної системи Асамблеї високого рівня, яка по суті є оскарженою версією C. Я жодного разу не читав опублікованого видання. Дос-версія, яку ви можете знайти на його сайті безкоштовно і ніколи не публікувалася, хоч чудово прочитана. Це також приблизно на 50% довше і не вистачає нічого про HLA (це загальна витрата часу).
Еван Керролл

1
@EvanCarroll Я розгублений. Ви змінили посилання на неправильну книгу, потім критикували книгу, на яку ви змінили посилання. Це було ненавмисно?
Мерлін Морган-Грехем

1
абсолютно моя помилка. @ MerlynMorgan-Graham корисний для вас як за те, щоб зловити його, так і виправити.
Еван Керролл


9

Програмування Art of Assembly - це чудовий ресурс, який має трохи про програмування x86.

x64 Документація ABI також корисна. Я намагався знайти посилання на версію, яка була на веб-сайті AMD, але я, здається, не можу її знайти більше, тому, мабуть, це доведеться робити.

Щось, що може допомогти [трохи] під час навчання, це замість того, щоб намагатися написати повний додаток з нуля в збірці, замість цього написати більшу частину його на C (або будь-якій іншій складеній мові насправді), а потім зателефонувати до фрагменту коду асемблери з що. Щойно ви зробите це, переверніть його, напишіть програму складання і зателефонуйте з неї деякі функції C.

Правка: виправлена ​​помилка друку.


1
Ще одна пропозиція: Напишіть просту програму на C, складіть її до складання, очистіть, щоб ваш асемблер міг зібрати її, а потім покращити версію складання. Це хороший спосіб отримати якийсь мінімальний функціонал (читати з клавіатури, записувати на консоль), що швидко проходить.
TMN

4

Дуже гарною книгою для вивчення складання x86 є інструменти оптимізації процесорів Pentium . Хоча головна увага в книзі - оптимізація коду складання, вона навчає складання Pentium попутно, а також є хорошим довідником.

Він довго не друкується, але його важко знайти.

Він постачається з дискетою, що містить "оптимізатор коду складання". Він фактично не оптимізує ваш код, але натомість створює коментований список, який вказує на те, де лежить неефективність, така як стояки трубопроводу.

Інструмент, який постачається разом із книгою, - це обмежена версія більш функціонального продукту, яку компанія автора використовувала для продажу, але з незнайомих мені причин вони давно не діють. Я не знаю чому - я думаю, що такий інструмент буде продаватися як гарячі торти.

x86 взагалі - дуже складна тема, оскільки існує багато варіантів, які підтримуються різними моделями мікропроцесорів. Після того, як ви дізнаєтесь основи, вам захочеться проконсультуватися з книгами даних Intel або AMD для точного чіпа, на який ви орієнтовані. На жаль, код, який працює швидко на одній моделі процесора, може бути не таким швидким на іншій мікросхемі.


Не дуже йшов на виставу; просто хочуть мати можливість генерувати бінарні файли. Ще погляньте :)
Біллі ONeal

2
Вам також потрібно буде навчитися користуватися певним асемблером, а не лише монтажними кодами. Кожен асемблер робить все зовсім інакше. Якщо ви збираєтеся написати багато асемблерного коду, використовуйте masm, як він був розроблений з урахуванням людських кодерів. Якщо ви просто збираєтеся писати невеликі фрагменти вбудованої збірки, ви можете використовувати gcc з GNU як (також називається газ) вбудована збірка. GNU як "синтаксис абсолютно не відрізняється від масм. Як було написано головним чином для використання в якості зворотного кінця для gcc, для створення виконуваного коду, і так не передбачено багато функцій, яких хочуть людські кодери.
Майк Кроуфорд

1

Чому б не спробувати wikibook - http://en.wikibooks.org/wiki/X86_Assembly . Це дає хороший вступний початок мові складання.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.