[英]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;
}
a
、 b
、 c
和d
分別綁定到eax
、 ebx
、 ecx
和edx
寄存器。 GCC 文檔詳細解釋了這是如何工作的。
在 linux(以及許多其他平台,非 linux、非 gcc)上,您可以使用nasm
等匯編程序將 intel 匯編代碼組裝成目標文件。 然后,您可以將您的匯編對象鏈接到應用程序中,而無需混合消息或匯編語言語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.