Написание сборки x86 на 64-разрядном процессоре


Например, я использую 64-разрядную версию Windows 7, но кажется, что все лучшие ресурсы для изучения ассемблерных языков говорят о x86. Если написание x86 на x64 возможно, как лучше всего это сделать? Существуют ли конвертеры? Кроме того, каковы некоторые хорошие ресурсы для 64-битного ассемблерного программирования?

3 7

3 ответа:

X86 определенно не лучшая, во-первых, сборка для изучения. если вообще это последнее, что вы хотите узнать. проверка https://github.com/dwelch67 lsasim-это набор инструкций, предназначенный для обучения сборке. pcemu_samples-это модифицированный pcemu (эмулятор 8086/88, способный запускать dos), с удаленными вызовами bios/dos, специально для изучения ассемблера 8088/86. Я рекомендую, когда вы подходите к сборке x86, вы начинаете с 8088/86, что-то вроде pcemu_samples (где вы находитесь вынужден сосредоточиться на ассемблере, а не на системных вызовах). dosbox и bohs могут запускать программы 8088/86 с dos / bios, когда вы хотите перейти к системным вызовам. Затем переходите к 32-и 64-битным улучшениям, многоядерным и все такое.

Вы принесете себе большую пользу, изучив x86 last. msp430, вещь lsasim выше, рука, большой палец (не thumb2) - все это хорошие отправные точки. Изучение нескольких различных наборов инструкций, по крайней мере, если не многих, также принесет вам большую пользу. У меня есть тренажеры для некоторых из них, которые дают вам хорошую видимость того, что происходит, я рекомендую сначала учиться на тренажерах, симуляторах, в которых вы можете получить видимость.

Если вы начнете с 8088/86, затем перейдете на 386/486, а затем перейдете на x64, другие ответы, которые вы получаете о инструкциях (sorta), работающих везде, будут иметь большой смысл.

Большинство 64-разрядных операционных систем могут без проблем запускать 32-разрядные двоичные файлы. Поскольку ваш вопрос помечен [windows], вы должны быть в порядке. Если вы следуете инструкциям по созданию 32-разрядного двоичного файла из ваших учебных пособий, то полученные двоичные файлы должны работать без изменений. Если вы используете другую цепочку инструментов, вам может потребоваться найти флаг, который говорит вашему ассемблеру производить 32-разрядный, а не 64-разрядный код.

Различия между 32-и 64-разрядным ассемблерным программированием заключаются в следующем довольно незначительно. Есть некоторые новые и улучшенные инструкции для обработки 64-разрядных типов, а также некоторые новые имена регистров. Есть еще новая Эби, с которой надо бороться. Intel имеет руководства для разработчиков программного обеспечения, в которых описаны все возможные инструкции и способы их работы.

X64 в большинстве случаев может запускать приложения x86 без каких-либо трудностей. Есть некоторые различия в ABI, но если вы просто хотите научиться программированию ассемблера, любой ресурс x86, на который вы смотрите, должен быть в порядке. Что же касается собственно обучения ассемблерному программированию, то это более широкий вопрос. Для начала вы можете посмотреть на NASM.