0

我写了一个小的随机数字程序,它利用 RDTSC 给我随机性。我使用 FASM 在 Linux Mint 17 上编写了它。

问题是,它在 AMD FX 64 位 PC 上完美运行,但在 Windows 8 和 Linux Mint 下,英特尔赛扬上网本(64 位)上的确切代码失败(或挂起)(我双启动,所以我调整了Win 8 的代码)

这里可能是什么问题?这基本上是代码;

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

我调试了一下,发现罪魁祸首隐藏在这部分代码中。但我也看不出有什么问题。它在我的 AMD PC 上完美运行。英特尔 CPU 是否默认禁用 RDTSC?

4

1 回答 1

2

您实际上是在读取时钟周期数(每秒数十亿次),然后不退出循环,除非它的最后 4 位 < 10。这种情况可能需要很长时间才会发生。

如果指令被禁用,您的程序将被操作系统杀死,并出现“非法指令”错误。

于 2015-02-08T22:17:44.663 回答