2012-06-09 4 views
-1

어셈블리에서 -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 
+0

을 (예 : C)로 변환 한 다음 어셈블러로 변환합니다. –

+5

0에서 60 사이의 임의의 숫자를 생성 한 다음 27에서 임의의 숫자를 뺍니다. –

답변

1

아이디어는 다음에, (33 + 27-1)는 0의 정수를 생성 RandomRange를 사용하여 생성 된 번호는 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

다음과 같은 코드를 사용할 수 있습니다 : 당신이 먼저 높은 수준의 언어로이 문제를 해결하려고 제안

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 

see more

+0

'pushad' /'popad'와'loop'와 같은 불필요한 느린 명령어가 무엇인지 설명하는 설명이 없습니다. pushad/popad 때문에 50 번 똑같은 일을합니다. 또한, 실행은'main'의 끝에서'BetterRandomRange'로 떨어지면서 결국 반환됩니다. –