写啥就是啥,和 C 代码没有任何关系,写的 mov $1, eax
编译器就塞到程序里。
支持与 C 语言进行交互,比如传输变量的值到寄存器中。
#include <stdio.h>
#include <assert.h>
int main()
{
int flag = 0;
unsigned int result = 0;
__asm__ volatile(
"mov $1, %%eax\t\n"
"cpuid\t\n"
"and $0x20000000, %%eax\t\n"
"test $0, %%eax\t\n"
"jnz 1\t\n"
"mov $1, %0\t\n"
"1:\t\n"
: "=r"(flag) // output
: // input
: "eax"); // clobbers
if (!flag)
{
assert(0 && "not support this cpu!");
}
for (int i = 0; i < 100; i++)
{
__asm__ volatile(
"rdrand %%eax\t\n"
"mov %%eax, %0\t\n"
: "=r"(result)
:
: "eax");
printf("0x%08x\n", result);
}
return 0;
}