我写了一个小的随机数字程序,利用RDTSC给我随机性。我使用FASM在Linux Mint 17上编写了它。
问题是,它在AMD FX 64位PC上完美运行,但是在Windows 8和Linux Mint下,Intel Celeron上网本(64位)上的确切代码失败(或挂起)(我是双启动的,所以我改编了Win 8的代码
这可能是什么问题?这基本上就是代码;
again:
rdtsc
and eax,1111b
cmp eax,10
jae again
;things to do with the random digit
我调试它,发现罪魁祸首隐藏在这部分代码中。但我也没有看到任何问题。它在我的AMD PC上完美运行。默认情况下,在Intel CPU上禁用RDTSC吗?
答案 0 :(得分:2)
你实际上是在读取时钟周期数(每秒数十亿)然后不退出循环,除非它的最后4位是< 10.可能需要很长时间才能发生这种情况。
如果指令被禁用,那么程序将被操作系统杀死并出现“非法指令”错误。