如何利用CPU生成随机数

最近碰到一个问题,就是在没有函数库或者API支持的情况下怎么生成随机数。

请教了一下别人,发现对于X86处理器来说,处理器的指令集里面就有生成随机数的指令--RDRAND,该指令利用的是x86 CPU上自带的随机数生成器,对于Intel x86处理器来说,该指令从Ivy Bridge开始支持,而AMD则从2015年起也添加了对这个指令的支持,所以老一点的处理器可能没法支持这个指令。

因为没有API,所以只能自己通过汇编调用该指令生成随机数,但是在执行的过程中发现,编译器没法识别该指令。所以只能用最简单粗暴的方式来实现,直接定义十六进制的指令,测试了一下,果然可以生成随机数,没有把程序搞挂掉大笑


GenerateRandomNumber PROC

    mov     rax, 0
    db 048h, 00Fh, 0C7h, 0F0h    ; invoke the RDRAND instruction to generate
                                ; the random number into eax
    ret
GenerateRandomNumber endp

根据函数调用的堆栈处理规则,rax/eax是被存放函数返回值的,在这个程序里面只有rax/eax这个寄存器被改变了,所以这里不需要对其他寄存器做任何操作,直接返回就行了。这个应该是最快的随机数生成方式,因为利用CPU的硬件资源直接调用CPU的一条指令,加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值