Assembly 如何生成两个随机数,一个在50和259之间,一个在50和159之间?

Assembly 如何生成两个随机数,一个在50和259之间,一个在50和159之间?,assembly,random,x86-16,tasm,dosbox,Assembly,Random,X86 16,Tasm,Dosbox,我正在为一门课做一个汇编8086项目,需要一种生成两个随机数的方法,一个在50和259之间,一个在50和159之间;我假设您不需要任何好的东西(例如,不需要用于安全/加密的东西,不关心偏见等) 考虑到这一点;我只是从BIOS中获取当前日期(“int0x1a,ah=0x04”)和自午夜以来的当前节拍(“int0x1a,ah=0x00”);并将它们合并(使用XOR)以获得伪随机数生成器的种子 一旦你有了一个种子,只需做一些数学杂技——例如,将“种子+1”乘以一个大素数,然后将其除以一个稍小的素数(得

我正在为一门课做一个汇编8086项目,需要一种生成两个随机数的方法,一个在50和259之间,一个在50和159之间;我假设您不需要任何好的东西(例如,不需要用于安全/加密的东西,不关心偏见等)

考虑到这一点;我只是从BIOS中获取当前日期(“int0x1a,ah=0x04”)和自午夜以来的当前节拍(“int0x1a,ah=0x00”);并将它们合并(使用XOR)以获得伪随机数生成器的种子

一旦你有了一个种子,只需做一些数学杂技——例如,将“种子+1”乘以一个大素数,然后将其除以一个稍小的素数(得到一个结果和一个余数);然后对结果、余数和原始数进行异或运算,得到一个新的种子,并返回最低的16位作为下一个随机数

如果你确实需要它是好的(而不仅仅是工作),你需要描述需求


无论如何;一旦您有了获取“随机”16位整数的代码,您可以将其右移或屏蔽,以获取0到255之间的“随机”值,然后向其添加50以获取50到305之间的值,如果该值大于259,则重试,以获得50到259之间的值。通过同样的方法,您可以移动或屏蔽以获得从0到127的值,添加50,如果大于159,则重试;获取50到159之间的值。

对于类的项目;我假设您不需要任何好的东西(例如,不需要用于安全/加密的东西,不关心偏见等)

考虑到这一点;我只是从BIOS中获取当前日期(“int0x1a,ah=0x04”)和自午夜以来的当前节拍(“int0x1a,ah=0x00”);并将它们合并(使用XOR)以获得伪随机数生成器的种子

一旦你有了一个种子,只需做一些数学杂技——例如,将“种子+1”乘以一个大素数,然后将其除以一个稍小的素数(得到一个结果和一个余数);然后对结果、余数和原始数进行异或运算,得到一个新的种子,并返回最低的16位作为下一个随机数

如果你确实需要它是好的(而不仅仅是工作),你需要描述需求


无论如何;一旦您有了获取“随机”16位整数的代码,您可以将其右移或屏蔽,以获取0到255之间的“随机”值,然后向其添加50以获取50到305之间的值,如果该值大于259,则重试,以获得50到259之间的值。通过同样的方法,您可以移动或屏蔽以获得从0到127的值,添加50,如果大于159,则重试;获取从50到159的值。

这是相关问题部分的答案吗?可能的问题。简单的LCG PRNG,带有一个函数srandsystime,该函数为基于线性同余生成器(LCG)的伪随机数生成器(PRNG)种子。有一个函数rand从LCG中获取范围为0到65535的下一个随机数
rand2num1to10
是一个转换rand返回的值并使其成为从1到10的数值的示例。在
lower
upper
(包括)的范围内生成随机值的一般方程为
rndvalue=(rand()%(upper-lower+1))+lower。注:使用此方法存在一个缺陷,即存在。该部分的答案是否与问题相关?可能的问题。简单的LCG PRNG,带有一个函数srandsystime,该函数为基于线性同余生成器(LCG)的伪随机数生成器(PRNG)种子。有一个函数rand从LCG中获取范围为0到65535的下一个随机数
rand2num1to10
是一个转换rand返回的值并使其成为从1到10的数值的示例。在
lower
upper
(包括)的范围内生成随机值的一般方程为
rndvalue=(rand()%(upper-lower+1))+lower。注:使用此方法存在一个缺陷,即存在。