0

我试图在汇编中生成一个介于 -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 
4

2 回答 2

2

这个想法是使用 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
于 2014-07-16T07:21:16.127 回答
-1

您可以使用以下代码:

include Irvine32.inc  
.data

.code
main proc
mov ebx, -27
mov eax, 33
mov ecx, 50

L1:
pushad          ; save all 32bit registers
call BetterRandomRange
call writeint
call crlf
popad           ; restore all 32bit registers
loop L1
main endp

BetterRandomRange proc
neg ebx
add eax, ebx
call randomrange
sub eax, ebx
ret
BetterRandomRange endp


end main

看更多

于 2017-05-06T06:38:34.247 回答