gpt4 book ai didi

assembly - assembly NASM 中的随机数生成

转载 作者:行者123 更新时间:2023-12-04 14:35:50 73 4
gpt4 key购买 nike

我正在研究 nasm 的一个大学项目。唯一的问题是我无法生成 162 和 278 之间的偶数随机数。我尝试了很多算法,但似乎无法限制范围内的数字。

是否有一个小技巧或调整来获得所需的范围内的数字?目的是在屏幕上随机显示一个水果(主要是蛇游戏)。

最佳答案

generate an even random number between 162 and 278



第1步

“生成随机数”
蛇游戏中展示水果的任务要求不高,所以我觉得用TimeStampCounter还是可以的。您将继续使用在 EAX 中找到的低双字.

——
rdtsc                        ; -> EDX:EAX

第2步

“162 到 278 之间的数字”
要将数字限制在所需的 [162,278] 范围内,您可以计算 (RandomNumber mod NumbersInTheRange) + StartOfTheRange .
  • RandomNumber 是 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]

    第 3 步

    “偶数”
    制作号码 通过降低最低位。

    ——
    and     eax, -2              ; -> EAX = {162,164,...,276,278}

    关于assembly - assembly NASM 中的随机数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53580871/

    73 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com