Для изучения блока - я должен запустить с 32 битов или 64 битов?

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

Я понимаю, что связанные с блоком вопросы задали прежде, но я просто ищу некоторое направление, это конкретно к моей ситуации:

Я запускаю Windows 7 и смущен тем, как я должен начать работать с блоком. Я должен запустить с x64, потому что я запускаю Windows 7? Некоторые люди сказали, 'запускаются с 32 битов сначала' - как я иду о выполнении этого? Что моя операционная система имеет отношение к моей способности записать блоку для '32' или '64' бит. На самом деле, что делает и разрядный' средний блок, где n является числом??


Править:

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

Примечание: Как я узнавал, я решил сфокусироваться на программировании с masm32. Поэтому большая часть ниже ресурсов фокусируется на этом.

  • тег Wiki (руководства новичка, справочники, документация ABI, и т.д.)
  • www.masm32.com
  • Блок X86 WikiBook
  • X86 Dissassembly WikiBook (большой для понимания некоторых конвенций и основ того, как высокоуровневый код переводит в блок),
  • WinAsm IDE (играет приятно с masm32),
  • Введение: Блок для Windows (все примеры кода для masm32),
  • Список прерываний
  • Учебное руководство по блоку (большой для помощи понять базовые понятия)
  • Руководство по блоку x86
  • Ресурсы Программной оптимизации Вуали Agner, включая некоторый хороший материал о соглашениях о вызовах по различным платформам (Windows по сравнению с Linux/OS X), а также много примеров того, как сделать определенные вещи эффективно. Не большой для общих новичков, но большой для промежуточного звена усовершенствованным читателям.

    (Он также детализировал информацию о производительности для каждой инструкции для Intel и центральных процессоров AMD, превосходных для серьезной микрооптимизации производительности. Некоторые новички могли бы хотеть посмотреть на часть этого, чтобы начать думать о том, как работают центральные процессоры, и почему Вы могли бы сделать что-то один путь вместо другого.)

52
задан 18 revs, 5 users 60% 28 August 2017 в 14:53
поделиться

3 ответа

Когда люди обращаются к 32-битной и 64-битной сборке, они говорят о том, какой набор инструкций вы будете использовать - их также иногда называют Ia32 и x64 в случае Intel, о котором, я полагаю, вы спрашиваете. В 64-битном случае происходит намного больше, поэтому, вероятно, лучше начать с 32-битного; вам просто нужно убедиться, что вы собираете свою программу с помощью 32-битного ассемблера в 32-битный двоичный файл. Windows по-прежнему будет знать, как его запустить.

Что я действительно рекомендую для начала работы со сборкой, так это что-нибудь с более простым набором инструкций, с которым можно было бы справиться. Изучите сборку MIPS - симулятор spim великолепен и прост в использовании. Если вы действительно хотите погрузиться прямо в мир сборки Intel, напишите себе небольшую программу на C, которая будет вызывать ваши процедуры сборки за вас; выполнение всех настроек и демонтажа «настоящей программы» - это большой беспорядок, и вы даже не сможете начать с этого. Так что просто напишите оболочку C с main () в ней, скомпилируйте и свяжите ее с объектными файлами, которые вы получите при написании кода сборки.

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

Вы можете загрузить все Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32 , чтобы начать работу.

34
ответ дан 7 November 2019 в 09:32
поделиться

Получить IDA pro. Колени пчелы для работы со сборкой.

Лично я не вижу большой разницы между 32-битной и 64-битной версиями. Дело не в битах, а в наборе команд. Когда вы говорите о сборке, вы говорите о наборах инструкций. Возможно, они подразумевают, что лучше учиться на 32-битном наборе команд. Однако, если это ваша цель, я предлагаю книги Дональда Кнута по алгоритмам - они обучают алгоритмам в терминах 7-битной сборки набора инструкций: D

По вопросам переносимости я предлагаю вам вместо встроенной сборки научиться использовать компилятор. intrinsics - это будет лучшая оптимизация для невстроенных оптимизаций. : D

3
ответ дан 7 November 2019 в 09:32
поделиться

, но требуется лучшее понимание того, что происходит на более низком уровне

Если вы действительно хотите знать все, что происходит на более низком уровне в процессорах / системах x86 / x64, я бы действительно рекомендовал начать с основ, то есть с кода реального режима 286/386. Например, в 16-битном коде вы вынуждены использовать сегментацию памяти, что является важной концепцией для понимания. Сегодняшние 32-битные и 64-битные операционные системы по-прежнему запускаются в реальном режиме, а затем переключаются между соответствующими режимами.

Но если вы заинтересованы в разработке приложений / алгоритмов, возможно, вам не захочется изучать все низкоуровневые ОС. Вместо этого вы можете сразу начать с кода x86 / x64, в зависимости от вашей платформы. Обратите внимание, что 32-битный код также будет работать в 64-битной Windows, но не наоборот.

0
ответ дан 7 November 2019 в 09:32
поделиться