首页 > 解决方案 > 在 64 位 Visual Studio 上替代 __asm _emit

问题描述

编辑:前一个被标记为重复。在汇编中编写一个带有序言和结尾的函数然后调用它是一回事,而将汇编代码通过字节直接合并到任何其他代码中是另一回事,这就是我想要做的。


我需要一个 __asm _emit 的替代品,更具体地说,在 64 位 Visual Studio 上,因为内联汇编在 32 位上可用,但在他们开始编写 64 位版本之前,他们决定不容忍使用内联汇编。

我需要能够使用字节将汇编代码直接合并到我的函数中。因此,以下代码将首先打印 69,然后打印 0。

int main()
{
    unsigned int _eax;

    __asm
    {
        mov eax, 69;
        mov _eax, eax;
    }
    printf("%d\n", _eax); // 69

    // 0x31, 0xC0
    // xor eax, eax
    __asm _emit 0x31;
    __asm _emit 0xC0;

    __asm
    {
        mov _eax, eax;
    }

    printf("%d\n", _eax); // 0
    getchar();

    return 0;
}

标签: c++cvisual-studiovisual-c++inline-assembly

解决方案


推荐阅读