이 예제도 5.3.3 에 있는 두번째 테스트 프로그램입니다.
처음에는 10개의 부호 없는 정수를 무작위로 생성하고 그 다음에는 -50부터 +49 범위에 있는 10개의 부호 있는 정수를 생성합니다.
어셈블리어 - 난수 생성하기
처음에는 10개의 부호 없는 정수를 무작위로 생성하고 그 다음에는 -50부터 +49 범위에 있는 10개의 부호 있는 정수를 생성합니다.
어셈블리어 - 난수 생성하기
TITLE Link Library Test #2 (TestLib2.asm)
; Testing the Irvine32 Library procedures.
INCLUDE Irvine32.inc
TAB = 9 ; 탭을 출력하기 위한 Tab의 ASCII 값
.code
main PROC
call Randomize ; 뒤에서 사용할 Random 함수를 위해 Seed 설정. ( 이 함수를 호출하지 않으면 같은 값이 계속 나옴)
call Rand1 ; Rand1 프로시저 호출
call Rand2 ; Rand2 프로시저 호출
exit ; 종료
main ENDP
Rand1 PROC ; Rand1 프로시저 정의
; Generate ten pseudo-random integers. 10개의 부호 없는 정수 생성
mov ecx, 10 ; loop 10 times // ecx에 10을 넣어서 10번 반복되게 한다.
L1: ; L1 루프 시작 부분
call Random32 ; Random32 함수 호출 - 무작위 int 생성 리턴값은 eax로 들어갑니다.
call WriteDec ; WriteDec - eax에 있는 값을 출력해줍니다.
mov al, TAB ; al에 Tab의 ASCII 값을 넣어줍니다.
call WriteChar ; Tab의 ASCII 값을 출력합니다.
loop L1 ; L1의 끝 - ecx가 0 이 아니라면 L1 의 처음 부분으로 돌아갑니다.
call Crlf ; 개행
ret ; 리턴
Rand1 ENDP
Rand2 PROC ; Rand2 프로시저 정의
; Generate ten pseudo-random integers between -50 and + 49 - -50 ~ +45 에 해당하는 부호 있는 정수 생성
mov ecx,10 ; ecx에 10을 넣어서 반복문이 반복될 횟수 설정
L1: ; L1 시작 부분
mov eax, 100 ; 0-99
call RandomRange ; 무작위 int 형 생성 - 범위 안에서
sub eax, 50 ; 0 - 99 사이에서 생성 된 값에 50을 빼줍니다
call WriteInt ; 연산 된 값을 출력해줍니다.
mov al, TAB ; Tab의 ASCII 값을 al에 넣어줍니다.
call WriteChar ; Tab 출력
loop L1 ; L1의 끝 - ecx가 0이 아니라면 L1의 처음 부분으로 돌아갑니다.
call Crlf ; 개행
ret ; 리턴
Rand2 ENDP
END main
|
'Programming > Assembly' 카테고리의 다른 글
[인텔 기반 컴퓨터를 위한 어셈블리 언어] 문자열을 역순으로 배치하기 (0) | 2012.01.23 |
---|---|
[인텔 기반 컴퓨터를 위한 어셈블리 언어] GetMSeconds를 이용한 성능 시험 (0) | 2012.01.23 |
[인텔 기반 컴퓨터를 위한 어셈블리 언어] 5.3.3 라이브러리 테스트 프로그램 (0) | 2012.01.23 |
[인텔 기반 컴퓨터를 위한 어셈블리 언어 5판]연습문제 풀이 4장 (0) | 2012.01.23 |
Visual Studio 2010 MASM 환경 설정 (1) | 2012.01.23 |