我正在重新审视我刚才写的代码,这些代码会对大数字进行一些数学运算。当我编写代码时,实验室有几个x86,分为32到64位。我的工作是在UltraSPARC上,我依稀记得从英特尔手册中提取这行代码,以确保代码在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) );
如果x [0]为0,那么一切都很顺利,程序开始消失。
任何人都可以向我解释这行代码实际上做了什么吗?
答案 0 :(得分:3)
字节.byte 15
和.byte 162
代表CPUID
指令
执行后,您会在EAX
,EBX
,ECX
和EDX
中获得结果。
这些结果将存储在数组元素中:
x[0] <- EAX
x[1] <- EBX
x[2] <- EDX
x[3] <- ECX