我正在从事汇编 nasm 的大学项目。唯一的问题是我无法生成 162 到 278 之间的偶数随机数。我尝试了很多算法,但似乎无法限制范围内的数字。
是否有一个小技巧或调整来获得范围内所需的数字?目的是在屏幕上随机显示一个水果(主要是贪吃蛇游戏)。
生成 162 到 278 之间的偶数随机数
Step 1
“生成随机数”
在贪吃蛇游戏中显示水果的任务要求不是太高,所以我认为使用时间戳计数器是相当可以的。您将继续使用在中找到的低位双字EAX
.
-
rdtsc ; -> EDX:EAX
Step 2
“162 到 278 之间的数字”
要将数字限制在所需的 [162,278] 范围内,您可以计算
(RandomNumber mod NumbersInTheRange) + StartOfTheRange
.
- 随机数是
EAX
从第一步开始注册。
- 范围内的数字是
upper bound - lower bound + 1
. 别忘了+1。
- StartOfTheRange 是其下限。
-
xor edx, edx ; Required because there's no division of EAX solely
mov ecx, 278 - 162 + 1 ; 117 possible values
div ecx ; EDX:EAX / ECX --> EAX quotient, EDX remainder
mov eax, edx ; -> EAX = [0,116]
add eax, 162 ; -> EAX = [162,278]
Step 3
“偶数”
记下号码even通过降低其最低位。
-
and eax, -2 ; -> EAX = {162,164,...,276,278}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)