簡體   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