Например, я использую 64-разрядную версию Windows 7, но, похоже, все лучшие ресурсы для изучения ассемблерных языков говорят о x86. Если запись x86 на x64 возможна, что это лучший способ сделать это? Существуют ли преобразователи? Кроме того, какие хорошие ресурсы для 64 бит сборка программирования?Запись сборки x86 на процессоре x64 бит
ответ
x86 определенно не лучший, во-первых, сборка для изучения. если вообще это последний, который вы хотите узнать. checkout https://github.com/dwelch67 lsasim - это набор инструкций, предназначенный для обучения сбору. pcemu_samples - модифицированный pcemu (эмулятор 8086/88, способный запускать dos), с удалением вызовов bios/dos, специально для изучения ассемблера 8088/86. Я рекомендую, когда вы приближаетесь к сборке x86, вы начинаете с 8088/86, что-то вроде pcemu_samples (где вы вынуждены сосредоточиться на ассемблере, а не на системных вызовах). dosbox и bochs могут запускать программы 8088/86 с dos/bios, когда вы хотите перейти в системные вызовы. Затем двигайтесь в 32 и 64-битные усовершенствования, многоядерные и все такое.
Вы получите большую пользу, изучив x86 в прошлом. msp430, lsasim вещь выше, рука, большой палец (не thumb2) - все хорошие отправные точки. Изучение нескольких различных наборов инструкций, по крайней мере, если не многих, также принесет вам большую пользу. У меня есть симуляторы для некоторых из них, которые дают вам хорошую видимость в том, что происходит, я рекомендую сначала учиться на симуляторах, симуляторы, на которых вы можете получить видимость.
Если вы начинаете с 8088/86, то переходите к 386/486, а затем переходите в x64, другие ответы, которые вы получаете о инструкциях (sorta), работающих повсюду, будут иметь большой смысл.
Большинство 64-разрядных операционных систем могут запускать 32-разрядные двоичные файлы без проблем. Поскольку ваш вопрос помечен [windows], вы должны быть в порядке. Если вы следуете инструкциям по созданию 32-битного двоичного кода из ваших учебных пособий, результирующие двоичные файлы должны работать без изменений. Если вы используете другую инструментальную цепочку, вам может потребоваться найти флаг, который сообщает ассемблеру, что он создает 32-битный, а не 64-разрядный код.
Различия между программированием на 32- и 64-разрядные сборки довольно незначительные. Для обработки 64-битных типов есть несколько новых и улучшенных инструкций, а также несколько новых имен регистров. С ABI тоже нужно бороться. Intel имеет руководства для разработчиков программного обеспечения, которые описывают все возможные инструкции и способы их работы.
В большинстве случаев x64 может запускать приложения x86 без каких-либо затруднений. В ABI есть некоторые отличия, но если вы просто хотите изучить программирование сборки, любой ресурс x86, на который вы смотрите, должен быть в порядке. Что касается самого программирования сборки сборки, то это более широкий вопрос. Для начала вы можете посмотреть NASM.
См. Этот вопрос: http://stackoverflow.com/questions/2352048/assembly-32-bit-vs-64-bit –