Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 移植旧程序集(_asm),以便在x64下编译_C++_Assembly_Compilation_64 Bit_Porting - Fatal编程技术网

C++ 移植旧程序集(_asm),以便在x64下编译

C++ 移植旧程序集(_asm),以便在x64下编译,c++,assembly,compilation,64-bit,porting,C++,Assembly,Compilation,64 Bit,Porting,我正在移植一段包含程序集的旧代码。它不会在Vis Studio 2010下的x64上编译,出现以下错误: 此体系结构x64不支持使用“\u asm”关键字的非标准扩展 在阅读了其他一些条目之后,我现在很清楚,我必须重新编写代码,使其具有可移植性。我很难移植一段代码。我需要一些帮助。我如何重写该块,使其在x86和x64下编译 unsigned tval= 0; unsigned AXr, BXr, CXr, DXr; _asm{ push eax pus

我正在移植一段包含程序集的旧代码。它不会在Vis Studio 2010下的x64上编译,出现以下错误: 此体系结构x64不支持使用“\u asm”关键字的非标准扩展

在阅读了其他一些条目之后,我现在很清楚,我必须重新编写代码,使其具有可移植性。我很难移植一段代码。我需要一些帮助。我如何重写该块,使其在x86和x64下编译

unsigned        tval= 0;
unsigned        AXr, BXr, CXr, DXr;
_asm{
    push eax
    push ebx
    push ecx
    push edx

    mov eax, tval
    mov ebx, 0
    mov ecx, 0
    mov edx, 0
    cpuid
    mov AXr, eax
    mov BXr, ebx
    mov CXr, ecx
    mov DXr, edx

    pop edx
    pop ecx
    pop ebx
    pop eax
 }

谢谢你的帮助

汇编程序助记符
cpuid
使用
cpuid
指令提取处理器信息。看一看-它有一个C++例子。 更新我用一些简单的C代码尝试了这个函数-

#include <stdio.h>
#include <intrin.h>

int main(void)
{
    int info[4] = {0};
    __cpuid(info, 0);
    printf("%X %X %X %X\n", info[0], info[1], info[2], info[3]);
    return 0;
}

当您使用MSVC时,如果您想要替换asm块,请尝试:

int regs[4];
__cpuid( regs, tval );
AXr = regs[0];
BXr = regs[1];
CXr = regs[2];
DXr = regs[3];
您还需要:

#include <intrin.h>
#包括

看看这个:谢谢你,内森。其中大多数都不是选项(例如使用外部汇编程序或编译器)。调整Vis-Studio编译器标志也没有做到这一点。我正在寻找最快的方式,我可以得到这件作品转换,而不必学习如何访问C++等,如果我找不到Quy,我会勉强做。我正在移植一个巨大的项目,鉴于这是该项目中唯一未解决的组装件,我犹豫是否要投入太多时间,因此我希望能够利用某人的广博知识,他可以花两分钟,为我节省大量时间。谢谢你的参考。我试着把它作为一个起点,看看它有多好。因此,将代码放入一个文件中,按照页面上的说明进行编译。实际上,代码本身甚至没有编译。为了避开编译问题做了一些更改,程序崩溃了。我以后可能会看看,我是否可以使用它的一些片段,而不是让那些乱七八糟的东西发挥作用。
#include <intrin.h>