Какой синтаксис и архитектуру сборки наиболее полезно знать? - PullRequest
23 голосов
/ 31 августа 2009

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

Во-первых, существует два типа синтаксиса: Intel и AT & T. Какая разница? Почему еще два в использовании? Когда мне нужно будет использовать одно против другого?

Во-вторых, там множество фишек. Intel против AMD, 32-битные против 64-битных, x86 против других архитектур ... даже x86 - это целое семейство чипов. Итак, как я могу узнать, подойдет ли сборка, которую я изучаю с определенной веб-страницы, для моей машины?

Существует еще больше вариантов (операционная система даже играет роль в определении того, как будет выполняться код.

Итак, большой вопрос, со всеми этими переменными, как я могу узнать, какой тип я должен выучить? Что чаще всего? Как люди могут «знать сборку», когда есть все эти варианты?

Ответы [ 11 ]

12 голосов
/ 31 августа 2009

Во-первых, существует два типа синтаксиса: Intel и AT & T. Какая разница?

Основные различия являются поверхностными: например, обратные операнды.

Почему до сих пор используются два? Когда мне нужно будет использовать один против другого?

Intel использует синтаксис, который является основным отклонением от синтаксиса, который используется практически во всех других процессорных документах ISA.

GNU as использует синтаксис AT & T для всех платформ и поддерживает синтаксис Intel для x86 и x86_64.

Другие ассемблеры (например, NASM, MASM и т. Д.) Используют исключительно синтаксис Intel.

Итак, как я могу узнать, подойдет ли сборка, которую я изучаю с определенной веб-страницы, для моей машины?

Это задокументировано в руководствах по процессорам от Intel и AMD . Песочница тоже хороший ресурс.

Итак, большой вопрос, со всеми этими переменными, как я могу узнать, какой тип я должен выучить? Что чаще всего?

Наиболее широко поддерживаемым был бы класс Pentium-pro, так называемый i686 и класс K8 (называемый x86_64, amd64 или EM64T). Существуют различные варианты: MMX, SSE или их варианты. Посмотрите инструкцию CPUID - она ​​предоставит вам информацию о поддержке процессора, на котором вы работаете.

Как люди могут «знать сборку», когда есть все эти варианты?

Я не думаю, что кто-то "знает" x86. Каждый, кому нужно, имеет копию руководства по процессору.

7 голосов
/ 31 августа 2009

Весь смысл в том, что вы кодируете, напрямую используя базовый набор команд ЦП. Поскольку разные процессоры имеют разные наборы команд, они все разные. Однако, если вы знаете одну «сборку» и получаете основные идеи, переключение с одного набора команд на другой становится относительно простым.

Я бы предложил начать со сборки 80386 - она ​​поддерживается практически любым ПК, который вы можете найти, но не имеет слишком много расширений, чтобы запутать кого-то, только начинающего.

5 голосов
/ 01 сентября 2009

Какой тип вы должны изучить? Это зависит от того, что вы хотите с ним делать. Вы заинтересованы в получении дополнительной информации о вашем ПК? Вы заинтересованы во встроенном программировании? Убедитесь, что у вас есть какой-то способ выполнения вашего кода. Вы, вероятно, хотите изучить серию x86, но это не самое простое в освоении. Еще тогда, когда я думал, что самым простым в изучении был компьютер Radio Shack Color с руководством, которое они продавали.

Самое распространенное зависит от того, что вы хотите сделать. В компьютерах общего назначения существует множество чипов на базе x86, но гораздо больше микросхем в более специализированных ролях, таких как смартфоны и встроенные системы.

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

2 голосов
/ 31 августа 2009

Как уже упоминалось, найдите понравившийся вам ассемблер, который поддерживает ваше оборудование, и изучите его. Есть много вариантов, не все из которых Intel или AMD. В ряде встроенных систем используются другие чипы, включая почтенную серию 680x0.

Что касается знания всей сборки, знает ли кто-нибудь все языки программирования? Кто-нибудь знает все API dot net? Вы хорошо знаете небольшую базовую часть любого языка программирования, немного больше, которую можете использовать, но, возможно, не полностью понимаете, и большой выбор, о котором вы немного знаете, но вам нужно обратиться к руководству, и есть неизвестное количество, о котором вы вообще ничего не знаете.

Даже древние 6502 имели десятки операндов и методов адресации. Вы узнаете, что вам нужно для работы. Чем больше работы вы выполняете, тем больше вы учитесь.

2 голосов
/ 31 августа 2009

ты хочешь быть хакером Windows? учиться х86. ты хочешь быть встроенным парнем? пойди купи чип DSP для обучения и узнай это.

2 голосов
/ 31 августа 2009

Я однажды прочитал превосходное Джеффа Дантенманна "Язык ассемблера - шаг за шагом" давным-давно.Это, пожалуй, единственная книга по ассемблеру 80x86 для начинающих, которую я когда-либо видел, и она очень хорошая.Полагаю, что многое в нем несколько устарело, но программирование на ассемблере на x86 само по себе довольно устарело для большинства вещей в наши дни.Но если вы ищете, чтобы начать, и вы хотите основание, я думаю, что его книга - это то, где вы хотите быть.

2 голосов
/ 31 августа 2009

Я помню, как читал вступительную книгу по сборке x86 (я думаю) Питера Нортона. Книга знакомит новичка с процессом создания полноэкранного редактора жестких дисков для MS-DOS. Это лучший способ обучения, потому что вы получаете полное представление о низкоуровневом оборудовании, которое входит в архитектуру x86 и может применить эти знания и к другим процессорам. Менее полезным является знание прерываний DOS, но все же интересно.

2 голосов
/ 31 августа 2009

Я обнаружил, что сборка x86 не так проста в освоении, как первый ассемблер. Msp430 действительно легко. В мире больше процессоров ARM, чем 80x86, так что это неплохая платформа для начала, и она проста в освоении, с большим количеством регистров, кроме ПК и без стека, без специальных регистров, они все выполняют одинаковые задачи , Сначала я выучил lsi / pdp11 (нет, не такой уж старый), и он был настолько прост и понятен, что действительно облегчил изучение любого другого. Это был ассемблер, из которого был получен язык Си. Не уверен, где вы будете учиться, msp430 не далеко и доступен.

Вопрос изменился после того, как я написал это. Большой ответ - сначала научиться программировать, но я подозреваю, что это вы уже знаете и не относится к ассемблеру. Во-вторых, научиться выполнять эти шаги программирования, разбив его на регистр загрузки и хранения и операции типа alu. Понимая прерывания и их влияние, прерывание может возникать между любыми двумя инструкциями, вы должны сохранить состояние машины, регистры и флаги и т. Д. Некоторые процессоры делают большую часть этого для вас, поэтому вам может понадобиться попробовать несколько разных понять сложность. Прерывания и подпрограммы обработки прерываний продвинуты, просто возможность разбить вашу задачу на небольшие простые операции, обычно основанные на регистрах, квалифицируется как программирование в сборке.

2 голосов
/ 31 августа 2009

Реально, большинству разработчиков не нужно знать язык ассемблера в наши дни. Однако полезно знать понятия , стоящие за сборкой (архитектура машины, регистры, память и т. Д.). Для этого изучите один процессор, и это все, что вам нужно.

Извлечение http://www.grc.com/smgassembly.htm - Стив Гибсон - один из немногих разработчиков, активно пишущих приложения в сборке в наши дни, и у него на сайте много ресурсов.

1 голос
/ 15 октября 2017

ФАПО

Поставляется как исполняемый файл для Windows, готовый к запуску из коробки; распакуйте его архив и получите его из командной строки. Версия для Linux похожа на скомпилированный исполняемый файл ELF, в то время как версия для BSD / Unix поставляется в виде объектного файла, который вы компилируете с помощью своего собственного компилятора C и готовы к развертыванию кода на ассемблере. В настоящее время ведутся работы по разработке развивающегося FAsm для почти ассемблера, который также будет включать встроенную поддержку чипов ARM.

IDE, поддерживающие FAsm, включают WinAsm Studio с плагинами FAsm под названием WAFasm от Shoorick, упакованными в архив, который после распаковки готов к немедленному запуску. Существует также Fresh IDE, созданная независимым разработчиком и участником форума FAsm (Джон Фаундон) и предназначенная для нее, и многие другие альтернативы.

FAsm поддерживает COFF, 32 & 64bit PE, а также ELF для Linux и FreeBSD в форматах файлов .exe и .dll / связанных библиотек. Он обеспечивает поддержку макросов, а также заголовки, следующие за его форматом. Полный список форматов исполняемых файлов, поддерживаемых FAsm, можно найти на официальном веб-сайте, поскольку их много.

FAsm сейчас всего около 20 лет, а его размер составляет чуть более 1 мегабайта.

FAsm имеет довольно большой пользовательский форум, посвященный темам, касающимся всех платформ, которые он обслуживает, а также темам, начиная от openGL и заканчивая разработкой доморощенных систем прозрачности изображений PNG и приложений с графическим интерфейсом.

Настоятельно рекомендуется.

Помните, что ассемблер, вопреки идиотским предположениям, никогда не умрет, потому что каждый компилятор должен делать то же самое - просто дружественный FYI - компилировать, ссылаться, собирать ... верно?

Тема может быть немного в возрасте, но тема по-прежнему актуальна и в этой заметке в заключение наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...