视觉工作室组装

时间:2012-10-24 19:15:47

标签: c visual-studio assembly

我遇到了Visual Studio的问题,它无法识别asm中的“byte ptr”。有谁知道我应该用什么呢?我使用visual studio,因为我只想在c ++代码旁边做一些asm来加快速度。所以任何人都可以检查代码,因为我不确定返回(这只是一个测试)。这也适用于uint吗?

__declspec(naked) void bewerken(int letter)
{
    __asm
    {
        push ebp
        mov ebp, esp
        sub esp, 1      // ruimte maken voor 1 variabele van 1 byte
        mov byte ptr [eax], [ebp+8]
        mov esp, ebp
        pop ebp
        ret
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    char* bYte;
    int letter;
    printf_s("Voer een letter in:\n");
    letter = getchar();

    if (letter < 128)
    {
        __asm 
        {
            push letter
            call bewerken
            add esp, 4
            mov byte ptr bYte, eax
        }
    }
    else
    {
        printf_s("Te hoog.\n");
    }

    getchar();
    return 0;
}

注意:“BYTE PTR”无法编译

1 个答案:

答案 0 :(得分:4)

没有有效的寻址模式mov whatever [eax], [ebp+8]

一个人可以mov al, [ebp+8]mov ax,[ebp+8]mov eax,[ebp+8]以及mov rax,[ebp+0x132220],但也可以立即移动到具有立即偏移的地址。那将是唯一需要显式宽度属性的情况:mov byte ptr 0x01,[ebp+8]至少这是它在debug.exe时代的工作方式......

在所有其他情况下,操作的宽度应该清晰。