ошибка C2400: синтаксическая ошибка встроенного ассемблера во «втором операнде»; нашел "регистр"

Я сталкиваюсь с ошибкой компиляции при работе с инструкциями по сборке в VC++ в виде встроенных блоков ассемблера на основе MACRO.

error C2400: inline assembler syntax error in 'second operand'; found 'register'

Вот код:

_asm {\

        mov esi,dword ptr [pMemBlock]\
        sub esp,sizeOfblock\
        mov ebx,sizeOfblock\
        mov shrResult,ebx\
        shr shrResult,2\
        mov ecx,shrResult\
        mov shrResult,0\
        mov edi,esp\
        rep movs dword ptr es:[edi],dword ptr[esi]\
}

С уважением Усман


person Usman    schedule 21.02.2011    source источник
comment
@Мухаммад: Отлично. :) Я добавлю свой комментарий в качестве ответа.   -  person GManNickG    schedule 21.02.2011


Ответы (2)


Эта пустая строка после строки _asm { завершит выполнение макроса. Он должен быть удален или иметь \ на нем.

person GManNickG    schedule 21.02.2011

Так должно быть

_asm {\
    __asm mov esi,dword ptr [pMemBlock]\
    __asm sub esp,sizeOfblock\
    ...

См. эту страницу msdn.

person Abyx    schedule 21.02.2011