当我实现在 Assembly 中为我们提供的随机数生成程序时,一半时间它给了我除以零误差,另一半时间它完美地工作。我相信我正确地实现了代码,但会告诉你我是如何编写代码的。
randomCompNum PROC
call Randomize ;Sets seed
mov eax,10 ;Keeps the range 0 - 9
call RandomRange
mov compNum1,eax ;First random number
L1: call RandomRange
.IF eax == compNum1 ;Checks if the second number is the same as the first
jmp L1 ;If it is, repeat call
.ENDIF
mov compNum2,eax ;Second random number
L2: call RandomRange
.IF eax == compNum1 ;Checks if the third number is the same as the first
jmp L2 ;If it is, repeat
.ELSEIF eax == compNum1 ;Checks if the third number is the same as the second
jmp L2 ;If it is, repeat
.ENDIF
mov compNum3,eax ;Third random number stored
ret
randomCompNum ENDP
这是 Visual Studios 提供给我的 RandomRange 的反汇编
_RandomRange@0:
004019C1 push ebx
004019C2 push edx
004019C3 mov ebx,eax
004019C5 call _Random32@0 (4019A6h) ;<---- This function doesn't touch ebx
004019CA mov edx,0
004019CF div eax,ebx ;<---- That's where the error occurs
004019D1 mov eax,edx
004019D3 pop edx
004019D4 pop ebx
004019D5 ret
你知道是什么导致了这个错误吗?
我很想创建自己的随机数生成器。
RandomRange 方法的背景:很简单。您使用 Randomize 设置种子,将 10 移动到 eax 使 RandomRange 保持在 0 - 9 之间。这就是我能找到的关于该函数的所有文档,所以我相信这就是它的全部内容。