如何生成2个随机数,一次在50到259之间,一次在50到159之间?

时间:2019-05-23 06:31:42

标签: assembly random x86-16 tasm dosbox

我正在为一个类的装配8086项目工作,需要一种生成2个随机数的方法,一次在50和259之间,一次在50和159之间。

1 个答案:

答案 0 :(得分:4)

对于一个班级的项目;我假设您不需要任何好处(例如,不需要用于安全性/密码学的东西,不需要担心偏见等)。

考虑到这一点;我将从BIOS中获取当前日期(“ int 0x1A,ah = 0x04”)和自午夜以来的当前价格(“ int 0x1A,ah = 0x00”);并将它们合并在一起(与XOR),以获得用于伪随机数生成器的种子。

一旦有了种子,就可以做一些数学杂技-例如将“ seed + 1”乘以较大的质数,然后将其除以稍小的质数(得到结果和余数);然后对结果,余数和原始数进行XOR运算,得到一个新种子,并返回最低的16位作为下一个随机数。

如果您确实需要做的好(而不只是工作),则需要描述需求。

无论如何;一旦有了获得“随机” 16位整数的代码,就可以将其右移或屏蔽以获取从0到255的“随机”值,然后将其加50以获得从50到305的值,然后重试如果它大于259,则最终得到的值是50到259。以同样的方式,您可以移动或屏蔽以得到0到127的值,加50,然后如果它大于159,则重试;得到一个从50到159的值。