LINUX.ORG.RU

Киньте в меня учебником по современному x86 асму

 , , ,


0

2

Нужно быстро научиться понимать асм, хотя бы на уровне чтения выхлопа компилятора или в отладчике. Если для ARM тоже есть, кидайте. Язык учебника не важен. Заранее спасибо.


Intel.com, там есть полное описание.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)

Под x86 для введения можно взять https://www3.nd.edu/~dthain/compilerbook/compilerbook.pdf#chapter.10 http://stolyarov.info/books/programming_intro/vol2 https://pacman128.github.io/pcasm/ https://quantum-mirror.hu/mirrors/pub/gnusavannah/pgubook/ProgrammingGroundUp... А еще вот очень советую https://beginners.re/RE4B-RU.pdf - правда это не конкретно о программировании, но тоже в тему. И вот еще лекция https://www.lektorium.tv/lecture/14989

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)

Дэвид М. Харрис, Сара Л. Харрис - Цифровая схемотехника и архитектура компьютера. Дополнение по архитектуре ARM - 2019.pdf

ukr_unix_user ★★★★
()

А выхлоп какого компилятора? gcc выдаёт в синтаксисе AT&T, к нему надо отдельно приспосабливаться.

luke ★★★★★
()
Ответ на: комментарий от luke

Потратить лишних пять минут - это отдельно приспосабливаться?

Алсо, в каком попросишь - в таком и выдает.

anonymous
()
Ответ на: комментарий от luke

gcc выдаёт в синтаксисе AT&T, к нему надо отдельно приспосабливаться.

Можно особым флагом заставить его выдавать в интеловом синтаксисе

Кроме того, всегда можно дизасмнуть

SZT ★★★★★
()

HLA aka «High Level Assembler», скачать и книжка «Art Of Assembly»

за: это высокоуровневый ассемблер, очень быстрый. с множеством фич из обычных языков, богатой стандартной библиотекой. но и возможностью вручную выбирать calling conventions. ну то есть, ассемблер всё-таки, несмотря на синтаксис типа высокоуровневого языка.

параллельно с ним можно изучать C++, Free Pascal и прочее. и ускорить обучение этим языкам – некоторые вещи очень похожи.

против: синтаксис отличается от обычных ассемблеров типа fasm/nasm/yasm/gas. так что их учить всё равно нужно.

ну и какого-нибудь Agner Fog почитать про calling conventions, и особенности оптимизации под конкретные процессоры.

по ARM’ам нужно читать что-то отдельно. там инструкции с предикатами, несколько наборов инструкций, не всё так просто.

anonymous
()

Выхлоп gcc где-то с версии 4.4 почти невозможно понимать, слишком много оптимизаций делает.

Вообще, архитектуру железа и операционки надо весьма прилично знать, чтобы ассемблер о чём-то говорил.

Ну и без практики самостоятельного написания кода, хотя бы кратковременной, тоже ничего не поймёшь.

mv ★★★★★
()

Читай Юричева RE4B и Блума Proffesional Assembly Language, первая как раз по чтению выхлопов, вторая хороший учебник асма.

AKonia ★★
()
Ответ на: комментарий от mv

Выхлоп gcc где-то с версии 4.4 почти невозможно понимать, слишком много оптимизаций делает.

Вполне возможно, вопрос практики. Трудно бывает понять, почему он себя так или иначе ведет. И с оптимизациями не всегда всё хорошо. Иногда компилятор такую лютую хрень делает, что я пишу багрепорт в https://gcc.gnu.org/bugzilla/

SZT ★★★★★
()
Ответ на: комментарий от SZT

gcc

И с оптимизациями не всегда всё хорошо.

Что автогенеренный код в виде

const char* xrequestcode2str(unsigned char code) {
if (0) {}
else if (code == X_CreateWindow) return "X_CreateWindow";
else if (code == X_ChangeWindowAttributes) return "X_ChangeWindowAttributes";
else if (code == X_GetWindowAttributes) return "X_GetWindowAttributes";
else if (code == X_DestroyWindow) return "X_DestroyWindow";
else if (code == X_DestroySubwindows) return "X_DestroySubwindows";
else if (code == X_ChangeSaveSet) return "X_ChangeSaveSet";
...
else return NULL;
}

не может превратить в возврать значения из таблицы. Тупо генерит как есть - каскад сравнений c условными переходами.

clang справляется.

anonymous
()
Ответ на: комментарий от anonymous

И мне на суахили и кхмерском (для знакомого).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.