我正在重新审视我不久前编写的对大数进行一些数学运算的代码。当我编写代码时,实验室有几个 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) );
如果 x[0] 为 0,则一切正常,程序开始运行。
谁能向我解释这行代码实际上做了什么?
最佳答案
字节 .byte 15
和 .byte 162
代表CPUID
操作说明。
当它执行时,你会在 EAX
中得到结果, EBX
, ECX
, 和 EDX
.
这些结果将存储在数组元素中:
x[0] <- EAX
x[1] <- EBX
x[2] <- EDX
x[3] <- ECX
关于c - .byte 在这个 asm 行中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230027/