如何使用Visual Studio 2012使用x64架构编译内联汇编?

时间:2015-08-12 06:53:16

标签: c++ assembly inline

我正在尝试编译一个内联汇编代码,该代码可以正常使用x86,但据我所知,你无法使用x64编译内联汇编代码。有没有解决这个问题?任何帮助赞赏。我使用_asm的代码段:

int vfscanf(FILE* file, const char *format, va_list argPtr)
{
    size_t count = 0;
    const char* p = format;

    while(1)
    {
        char c = *(p++);
        if (c == 0) 
            break;

        if (c == '%' && (p[0] != '*' && p[0] != '%')) 
            ++count;
    }

    if (count <= 0)
        return 0;

    int result;

    _asm
    {
        mov esi, esp;
    }

    for (int i = count - 1; i >= 0; --i)
    {
        _asm
        {
            mov eax, dword ptr[i];
            mov ecx, dword ptr [argPtr];
            mov edx, dword ptr [ecx+eax*4];
            push edx;
        }
    }

    int stackAdvance = (2 + count) * 4;

    _asm
    {
        mov eax, dword ptr [format];
        push eax;
        mov eax, dword ptr [file];
        push eax;

        call dword ptr [fscanf];

        mov result, eax;
        mov eax, dword ptr[stackAdvance];
        add esp, eax;
    }

    return result;
}

我称之为此函数的代码段:

int scan(const char * _Format, ... )
{
    va_list args;
    va_start(args, _Format);
    _interlockedbittestandset()
    int result = vfscanf(_ptr, _Format, args);
    va_end(args);
    return result;
}

0 个答案:

没有答案