C Windows上的32位asm代码到64位汇编代码

C Windows上的32位asm代码到64位汇编代码,c,C,我有一个驱动程序代码,其中包含一个正在使用\u asm(内联汇编)的汇编代码。当我使用32位WDK编译时,它工作正常,但它会引发以下错误: 错误C4235:使用了非标准扩展名:“_asm”关键字不可用 基于此体系结构的支持” 请将以下代码转换为64位编译的asm代码 _asm { mov ebx, cr0 push ebx and ebx, ~010000h mov cr0, ebx

我有一个驱动程序代码,其中包含一个正在使用
\u asm
(内联汇编)的汇编代码。当我使用32位WDK编译时,它工作正常,但它会引发以下错误:

错误C4235:使用了非标准扩展名:“_asm”关键字不可用 基于此体系结构的支持”

请将以下代码转换为64位编译的asm代码

_asm
    {
        mov     ebx, cr0 
        push    ebx 
        and     ebx, ~010000h 
        mov     cr0, ebx
    } 

使用Microsoft的编译器内部函数

#include <intrin.h>
__writecr0(__readcr0() & ~0x1000);
#包括
__writer0(uu readcr0()&~0x1000);

这应该适用于x86和x64(当然,操作
CR0
只能在内核模式下进行)。

使用Microsoft的编译器内部函数

#include <intrin.h>
__writecr0(__readcr0() & ~0x1000);
#包括
__writer0(uu readcr0()&~0x1000);

这在X86和X64上都是有效的(当然,操作<代码> CR0只能在内核模式下进行)。VisualC++不支持X64编译的内联汇编。在哪里,他使用VisualC++?@ TuuRub Uyk Kyk K,“<代码>错误C423 5< /代码>”暗示了它。ICC和GCC都不使用这种错误编号系统。它将来会支持64位吗?@tuğrulbüyükık错误代码的格式是典型的VC++错误,

\u asm
关键字是VC++扩展,汇编代码是英特尔格式,所有指向VC++的,Visual C++都不支持X64编译的内联汇编。在哪里,他说他使用VisualC++?@ TuuuRub Uyk Kyk K,“<代码>错误C423 5< /代码>”暗示了它。ICC和GCC都不使用这种错误编号系统。它将来会支持64位吗?@tuğrulbüyükıkşk错误代码的格式是典型的VC++错误,
\u asm
关键字是VC++扩展,汇编代码是英特尔格式的,所有代码都指向VC++,取消WP听起来像是一个非常糟糕的黑客行为。顺便说一句,取消WP听起来像是一个非常糟糕的黑客行为。