Я действительно желаю изучить блок. Я довольно хорош в c/c ++, но хочу лучшее понимание того, что продолжается на более низком уровне.
Я понимаю, что связанные с блоком вопросы задали прежде, но я просто ищу некоторое направление, это конкретно к моей ситуации:
Я запускаю Windows 7 и смущен тем, как я должен начать работать с блоком. Я должен запустить с x64, потому что я запускаю Windows 7? Некоторые люди сказали, 'запускаются с 32 битов сначала' - как я иду о выполнении этого? Что моя операционная система имеет отношение к моей способности записать блоку для '32' или '64' бит. На самом деле, что делает и разрядный' средний блок, где n является числом??
Править:
Вот некоторые ссылки, которые помогли мне начать с блоком; другие, которые просто начинают, могут найти их полезными. Я буду продолжать обновлять этот список, поскольку я продолжаю свою поездку блока :)
Примечание: Как я узнавал, я решил сфокусироваться на программировании с masm32. Поэтому большая часть ниже ресурсов фокусируется на этом.
Ресурсы Программной оптимизации Вуали Agner, включая некоторый хороший материал о соглашениях о вызовах по различным платформам (Windows по сравнению с Linux/OS X), а также много примеров того, как сделать определенные вещи эффективно. Не большой для общих новичков, но большой для промежуточного звена усовершенствованным читателям.
(Он также детализировал информацию о производительности для каждой инструкции для Intel и центральных процессоров AMD, превосходных для серьезной микрооптимизации производительности. Некоторые новички могли бы хотеть посмотреть на часть этого, чтобы начать думать о том, как работают центральные процессоры, и почему Вы могли бы сделать что-то один путь вместо другого.)
Когда люди обращаются к 32-битной
и 64-битной
сборке, они говорят о том, какой набор инструкций вы будете использовать - их также иногда называют Ia32
и x64
в случае Intel, о котором, я полагаю, вы спрашиваете. В 64-битном случае происходит намного больше, поэтому, вероятно, лучше начать с 32-битного; вам просто нужно убедиться, что вы собираете свою программу с помощью 32-битного ассемблера в 32-битный двоичный файл. Windows по-прежнему будет знать, как его запустить.
Что я действительно рекомендую для начала работы со сборкой, так это что-нибудь с более простым набором инструкций, с которым можно было бы справиться. Изучите сборку MIPS - симулятор spim
великолепен и прост в использовании. Если вы действительно хотите погрузиться прямо в мир сборки Intel, напишите себе небольшую программу на C, которая будет вызывать ваши процедуры сборки за вас; выполнение всех настроек и демонтажа «настоящей программы» - это большой беспорядок, и вы даже не сможете начать с этого. Так что просто напишите оболочку C с main ()
в ней, скомпилируйте и свяжите ее с объектными файлами, которые вы получите при написании кода сборки.
Пожалуйста, не входите в привычку писать встроенную ассемблерную программу в свой код C - это кошмар переносимости кода, и для этого нет причин.
Вы можете загрузить все Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32 , чтобы начать работу.
Получить IDA pro. Колени пчелы для работы со сборкой.
Лично я не вижу большой разницы между 32-битной и 64-битной версиями. Дело не в битах, а в наборе команд. Когда вы говорите о сборке, вы говорите о наборах инструкций. Возможно, они подразумевают, что лучше учиться на 32-битном наборе команд. Однако, если это ваша цель, я предлагаю книги Дональда Кнута по алгоритмам - они обучают алгоритмам в терминах 7-битной сборки набора инструкций: D
По вопросам переносимости я предлагаю вам вместо встроенной сборки научиться использовать компилятор. intrinsics - это будет лучшая оптимизация для невстроенных оптимизаций. : D
, но требуется лучшее понимание того, что происходит на более низком уровне
Если вы действительно хотите знать все, что происходит на более низком уровне в процессорах / системах x86 / x64, я бы действительно рекомендовал начать с основ, то есть с кода реального режима 286/386. Например, в 16-битном коде вы вынуждены использовать сегментацию памяти, что является важной концепцией для понимания. Сегодняшние 32-битные и 64-битные операционные системы по-прежнему запускаются в реальном режиме, а затем переключаются между соответствующими режимами.
Но если вы заинтересованы в разработке приложений / алгоритмов, возможно, вам не захочется изучать все низкоуровневые ОС. Вместо этого вы можете сразу начать с кода x86 / x64, в зависимости от вашей платформы. Обратите внимание, что 32-битный код также будет работать в 64-битной Windows, но не наоборот.