Какой синтаксис и архитектура сборки наиболее полезны для понимания?

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

Он задокументирован в руководствах по процессорам от Intel и AMD. Sandpile также является хорошим ресурсом.

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

Ты хочешь быть хакером Windows? узнайте x86. ты хочешь быть врожденным парнем? купите чип тренера DSP и узнайте об этом.

Ответ 9

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

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

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

Ответ 10

Сложно сказать, какая сборка "самая полезная", если вы не выбрали платформу, которую хотите использовать.

Если вы идете на ПК (intel, amd), начните с сборки x86. Существует общий набор инструкций для разных ЦП + некоторые специальные инструкции, такие как SSE. Если вы хотите разработать для Windows взглянуть на MASM, для Unix FASM будет хороший выбор.

Ответ 11

ФАПО

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

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

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

FAsm сейчас всего около 20 лет, и он по-прежнему имеет размер чуть более 1 мегабайта.

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

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

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

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