Muh*_*mza 3 random assembly nasm
我正在研究 nasm 的大学项目。唯一的问题是我无法生成 162 到 278 之间的偶数随机数。我尝试了很多算法,但似乎无法限制范围内的数字。
是否有一个小技巧或调整来获得所需的范围内的数字?目的是在屏幕上随机显示一个水果(主要是蛇游戏)。
我看了一下这篇文章:nasm random number generator function。也许你可以试试 (rdtsc % (278 - 162) / 2 + 162 / 2) * 2. 希望对你有帮助:)
生成 162 到 278 之间的偶数随机数
“生成随机数”
蛇游戏中显示水果的任务要求不高,所以我觉得使用TimeStampCounter还是可以的。您将继续使用EAX.
——
rdtsc ; -> EDX:EAX
Run Code Online (Sandbox Code Playgroud)
“162 和 278 之间
的数字”要将数字限制在所需的 [162,278] 范围内,您需要计算
(RandomNumber mod NumbersInTheRange) + StartOfTheRange.
EAX第一步的寄存器。 upper bound - lower bound + 1。不要忘记+1。 ——
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]
Run Code Online (Sandbox Code Playgroud)
“偶数”通过丢弃最低位
使数字偶数。
——
and eax, -2 ; -> EAX = {162,164,...,276,278}
Run Code Online (Sandbox Code Playgroud)