Ассемблерный код смешался с моим C ++ кодом. Как портировать на 64 бит - PullRequest
3 голосов
/ 29 октября 2010

Я портирую 32-битный код C ++ в 64-битный в VS2008. Старый код имеет смешанный код, написанный на ассемблере.
Пример:

__asm

{
  mov esi, pbSrc
  mov edi, pbDest

  ...

}

Я где-то читал, что мне нужно удалить весь ассемблерный код и поместить их в отдельный проект и как-нибудь связать с ним. Может кто-нибудь дать мне пошаговую пошаговую процедуру, чтобы сделать это. Я знаю C ++ и C #, но не знаю ассемблера. Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 29 октября 2010

Visual C ++ 2005, 2008 или 2010 не поддерживают встраивание сборки при компиляции для 64-битных платформ. В x64 ASM слишком много сложностей и сложностей, которые могут испортить код C (++) вокруг блока __asm, поэтому они просто не допускают этого. Короче говоря, нет способа "портировать" его.

Я предлагаю использовать 64-битные встроенные функции с #define и #ifdef при попытке кросс-архитектурной компиляции такого низкоуровневого кода. Проверить: http://msdn.microsoft.com/en-us/library/h2k70f3s.aspx

Редактировать : Однако, если вы действительно знаете, что делаете, вы можете сохранить надлежащие байтовые коды ASM в некотором виде буферного массива и выполнить этот «сырой» - через указатель void* и VirtualProtect() или что-то подобное. Конечно, вам нужно понимать соглашения о вызове / возврате x64, так как вы по сути будете вызывать функцию. Обратите внимание, что это 99,9% случаев плохая идея.

1 голос
/ 29 октября 2010

Если вы не можете использовать встроенные функции для выполнения своих задач или не можете написать эквивалент на C / c ++, вам придется погрузиться в язык ассемблера x64.С высокого уровня:

1) Предполагая, что вы начинаете с подпрограмм на языке ассемблера x86, вам нужно будет перенести их на x64.

2) Используйте ML64 (ассемблер Microsoft x64) или эквивалентный ассемблер для сборки ваших подпрограмм в .OBJ, которые вы можете связать с вашим проектом C / C ++.

3) Настройте пользовательский шаг сборки, который вызывает ассемблер для ваших файлов .ASM.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...