0

アセンブリで-27から+33までの乱数を生成しようとしています。

0からnまでの乱数を生成するというプロシージャがありますRandomize。nは上限です。

下限を0ではなく-27にシフトする方法は?

これはコードです:

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 に答える