0

我在使用 Visual Studio 时遇到问题,它无法识别 asm 中的“byte ptr”。有谁知道我应该改用什么?我使用 Visual Studio 是因为我只想在 c++ 代码旁边做一点 asm 来加快速度。所以任何人都可以检查代码,因为我不确定返回(这只是一个测试)。这对 in 也适用于 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”也不编译

4

1 回答 1

3

没有有效的寻址模式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 时代它是这样工作的……

在所有其他情况下,操作的宽度应该是明确的。

于 2012-10-24T19:23:01.000 回答