Этот:
Код: Выделить всё
unsigned long long int IntellRandom ()
{
unsigned long long int Result;
asm (
"PUSH %%RAX\n\
MOV $0, %%RAX\n\
RDRAND %%RAX\n\
MOV %%RAX, %0\n\
POP %%RAX":: "m"(Result)
);
return Result;
}
код работает. Но если EAX присвоить 0 и выполнить CPUID, то в EAX почему то 11. Как защитить эту функцию от исполнения на процессоре, не поддерживающем RDRAND? Компилятор MinGW, среда Code Blocks. Если процессор не поддерживает RDRAND инструкцию, то функция должна вызвать rand() и вернуть её значение.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.