在程序集中生成一个范围内的随机数

时间:2012-06-09 18:33:05

标签: assembly random masm irvine32

我正在尝试在装配中生成-27和+33之间的随机数。

有一个名为Randomize的过程,它生成一个介于0和n之间的随机数,其中n是上限。

如何将下限移至-27而不是0?

这是代码:

title test
INCLUDE irvine32.inc


.data
msg byte "Genrating 50 number",0
.code
main PROC
mov edx,offset byte
call WriteString
call crlf
mov ecx,50
L1:
mov eax,+33
call RandomRange
call writeDec



exit
main ENDP
END main 

2 个答案:

答案 0 :(得分:1)

这个想法是使用RandomRange生成从0到(33 + 27-1)的整数,然后从生成的数字中减去27。 下面的代码是用n个随机整数填充数组并显示数组。 随机范围是[-27,33]

INCLUDE Irvine32.inc
j equ 27
k equ 33
n =10

.data
arrayd sdword n dup(?)

.code
main proc
call randomize ;activate the seed
mov ecx,n
mov esi,0
L1:           ;the trick is the 3 instruction lines shown below
   mov eax,k+j
   call randomrange
   sub eax, j
   mov arrayd[esi*4],eax
   inc esi
   loop L1

   mov ecx,n
   mov esi,0
L2:
   mov eax,arrayd[esi*4]
   call writeInt
   mov al,20h
   call writechar
    inc esi
    loop L2
exit
main endp
end main

答案 1 :(得分:-1)

您可以使用以下代码:

Display

see more