.byte在这个asm行中意味着什么?

时间:2016-02-05 17:27:01

标签: c assembly x86

我正在重新审视我刚才写的代码,这些代码会对大数字进行一些数学运算。当我编写代码时,实验室有几个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,那么一切都很顺利,程序开始消失。

任何人都可以向我解释这行代码实际上做了什么吗?

1 个答案:

答案 0 :(得分:3)

字节.byte 15.byte 162代表CPUID指令 执行后,您会在EAXEBXECXEDX中获得结果。

这些结果将存储在数组元素中:

x[0] <- EAX
x[1] <- EBX
x[2] <- EDX
x[3] <- ECX