Visual Studio 2010 компилирует встроенную сборку на С++, как если бы Visual Studio 6?

StackOverflow https://stackoverflow.com/questions/4626981

Вопрос

У меня есть проект C++, созданный в VS6, который был открыт в VS2010 и отлично компилируется.Он содержит класс с небольшим количеством встроенного ассемблера, включая следующий код:

__asm{
  mov eax,this
  mov esi,[eax].m_pImage
  ...

Все отлично, пока я не попытаюсь создать новый проект MFC C++ в VS2010 и добавить класс с ассемблерным кодом, показанным выше.Внезапно это не скомпилируется, поскольку новая интерпретация __asm ​​требует, чтобы код был следующим (или чем-то подобным:это компилируется в любом случае):

__asm{
  mov eax,this
  mov esi,[eax]this.m_pImage
  ...

Теперь, хоть убей, я не могу понять, в чем разница между двумя проектами, которая позволяет преобразованному проекту VS6 компилировать встроенный ассемблерный код (предположительно в настоящее время недействительный) в VS2010, в то время как вновь созданный проект не может.

Есть ли где-нибудь (скрытая) настройка, позволяющая использовать старый компилятор VS6?

Это было полезно?

Решение

Встроенный ASM VS6 кажется исправленной ошибкой.Я говорю это потому, что не уверен, как компилятор мог это проверить. m_pImage был участником того, что было загружено в eax зарегистрировался и поэтому не смог найти смещение.Отвечая на ваш вопрос, я знаю, что нет возможности использовать старую семантику ASM в компиляторе VS6.

Я бы создал локальную переменную вне встроенного ASM и присвоил бы ее esi вместо.

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top