c - 在 Visual Studio 中组装

标签 c visual-studio assembly

我在使用 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”也不编译

最佳答案

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

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

关于c - 在 Visual Studio 中组装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056144/

相关文章:

visual-studio - 从 Visual Studio 内存窗口保存数据

c++ - 是否可以从 CUDA 10.1 内核调用 cuBLAS 或 cuBLASLt 函数?

c - 如果 char 是一个小整数,那么为什么它可以包含符号?

c - Socket编程read()函数出错为什么?

c# - 将服务引用集成到 C# 类中

c - itoa 实现崩溃?

c++ - x86-64 程序集 : why offset 25 bytes?

assembly - 将值存储在 MIPS 的 HI 和 LO 寄存器中

使用 for 循环初始化 C 结构

c - 向 2 个客户端发送 UDP 数据包,只有一个接收