我正在重新审视我不久前编写的对大数进行一些数学运算的代码。当我编写代码时,实验室有几个 x86,它们分为 32 位和 64 位。我的工作是在 UltraSPARC 上,我依稀记得从 Intel 手册中提取了这行代码,以确保该代码在 64 位 CPU 上使用。
unsigned long x[4];
x[0] = 0;
x[1] = 0;
x[2] = 0;
x[3] = 0;
asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) );
Run Code Online (Sandbox Code Playgroud)
如果 x[0] 为 0,则一切正常,程序开始运行。
谁能向我解释这行代码实际上做了什么?
字节.byte 15和.byte 162代表CPUID指令。
当执行你得到的结果EAX,EBX,ECX,和EDX。
这些结果将存储在数组元素中:
x[0] <- EAX
x[1] <- EBX
x[2] <- EDX
x[3] <- ECX
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |