c - .byte 在这个 asm 行中是什么意思?

标签 c assembly x86

我正在重新审视我不久前编写的对大数进行一些数学运算的代码。当我编写代码时,实验室有几个 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/

相关文章:

c++ - C 中的 PowerPC extsb

c++ - 错误 : invalid operand for instruction using indexed addressing and Clang

c - 移入 2 个 32 位寄存器

assembly - 自定义操作系统上的当前 x86 权限级别

c - 指针与 c 中的整数二维数组和字符串不同

linux - 加载引导加载程序的第二阶段和/或将控制权转移给它时出现问题

c - 炸弹实验室第 4 阶段 func4

c - 是否可以多次 scanf 且输出中没有换行符?

C、文件、路径等

c++ - 关于 "Address-of operator"(&)和c、c++中数组的问题