繁体   English   中英

如何将英特尔汇编 C 转换为 AT&T C++

[英]How to convert Intel Assembly C to AT&T C++

我试图将函数“__cpuid”从С语言转换为C++。 我有一个问题,g++ 编译器不能与英特尔汇编器一起使用。

我正在尝试翻译这段代码:

__asm
    {
        mov    esi, CPUInfo
        mov    eax, InfoType
        xor ecx, ecx
        cpuid
        mov    dword ptr[esi + 0], eax
        mov    dword ptr[esi + 4], ebx
        mov    dword ptr[esi + 8], ecx
        mov    dword ptr[esi + 12], edx
    }

我尝试使用互联网上的示例进行操作,我得到了这段代码,但它不起作用:

__asm
    (


            "movl   %CPUInfo,%esi\n"
            "movl   %InfoType,%eax\n"
            "xorl   %ecx,%ecx\n"
            "cpuid\n"
            "movl   %eax,0(%esi)\n"
            "movl   %ebx,4(%esi))\n"
            "movl   %ecx,8(%esi)\n"
            "movl   %edx,12(%esi)\n"
             :"=r"(CPUInfo)
 

    );
void cpuid(int InfoType, int *CPUInfo) {
  int a = InfoType;
  int c = 0;
  int b, d;
  __asm__ (
    "cpuid"
    : "+a"(a), "=b"(b), "+c"(c), "=d"(d)
  );
  CPUInfo[0] = a;
  CPUInfo[1] = b;
  CPUInfo[2] = c;
  CPUInfo[3] = d;
}

abcd分别绑定到eaxebxecxedx寄存器。 GCC 文档详细解释了这是如何工作的。

在 linux(以及许多其他平台,非 linux、非 gcc)上,您可以使用nasm等汇编程序将 intel 汇编代码组装成目标文件。 然后,您可以将您的汇编对象链接到应用程序中,而无需混合消息或汇编语言语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM