0

我正在学习 masm32,我需要该程序从 0-9 范围内生成一个随机整数,以与用户输入进行比较。如果我确实有一个整数,我对比较没有任何问题。每次运行程序时,是否有一种简单的方法可以从所述范围内生成一个新的随机整数?

我知道有 Irvine32 库,但是有没有办法做到这一点而无需下载额外的库?

谢谢。

另外,这个:

invoke GetTickCount
invoke nseed, eax
invoke nrandom, 10
mov number, eax

push offset number
call StdOut

给我一些笑脸而不是数字,有没有办法让它工作?

4

2 回答 2

1

从 RTC 中选择结果或从用户计时/输入中收集熵,进行简单哈希,生成 1 字节随机数据,然后计算 mod 10

于 2012-12-23T15:21:26.223 回答
0

由于您使用的是 MASM32,它在库中包含其所有功能的文档,所以 RTFM !!!打开 \masm32\help 并查看帮助文件!

为了在屏幕上显示一个数字,您需要首先将该数字转换为其 ASCII 等价物。ASCII "2" 与 2 不同。您可以使用自己的角色或使用名为 dwtoa 的 MASM32 库中的 DWORD 到 ASCII 函数。

因此,使用该函数,您的代码将变为:

invoke  GetTickCount
invoke  nseed, eax
invoke  nrandom, 10
invoke  dwtoa, eax, offset lpszNumber
invoke  StdOut, offset lpszNumber

其中 lpszNumber 在该.data?部分中定义为: lpszNumber db 2 dup (?)当然,使缓冲区足够大以容纳数字和 NULL 终止符。使用该代码,每次启动程序时,它都会生成一个介于 0 和 9 之间的随机数,转换为 ASCII 并打印到控制台。

除了包含 MASM32 中包含的函数的文档之外,它还包含所有函数的源代码。打开\masm32\m32lib,你可以看一下代码,看看一切是如何完成的……你甚至可以修改以供自己使用。

于 2012-12-23T17:54:14.557 回答