我写了一个小的随机数字程序,利用RDTSC给我随机性。我用FASM在Linux Mint 17上写的。
问题是,它在AMDfx64位PC上运行得很好,但在Windows8和LinuxMint(我是双引导的,所以我为Win8修改了代码)下,英特尔赛扬上网本(64位)上的确切代码失败(或挂起)
有什么问题吗?这基本上就是代码;

again:
rdtsc
and eax,1111b
cmp eax,10
jae again
;things to do with the random digit

我调试它,发现罪魁祸首隐藏在这部分代码中。但我也不觉得有什么问题。它在我的AMD电脑上工作得很好。RDTSC在英特尔CPU上是否被默认禁用?

最佳答案

基本上是读取时钟周期数(每秒数十亿),然后不退出循环,除非它的最后4位是<10。可能只是这种情况发生需要很长时间。
如果指令被禁用,您的程序将被操作系统杀死,并出现“非法指令”错误。

关于linux - 英特尔赛扬64位汇编程序上的RDTSC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28399947/

10-12 19:04