0

Visual Studioに問題があり、asmの「byteptr」を認識しません。誰かが私が代わりに何を使うべきか知っていますか?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;
}

注:「BYTEPTR」もコンパイルされません

4

1 に答える 1

3

有効なアドレッシングモードはありませんmov whatever [eax], [ebp+8]

mov al, [ebp+8]ormov ax,[ebp+8]mov eax,[ebp+8]andもできmov rax,[ebp+0x132220]ますが、イミディエートオフセットのあるアドレスにイミディエートを移動することもできます。明示的なwidth属性が必要なのは、これが唯一のケースです。mov byte ptr 0x01,[ebp+8]少なくとも、debug.exeの時代にはそれが機能していました...

それ以外の場合はすべて、操作の幅を明確にする必要があります。

于 2012-10-24T19:23:01.000 に答える