약 170억번 반복되는 반복문을 통하여 컴퓨터 성능을 시험해보는 예제 입니다.
반복문 시작 전 후로 현재 시간을 구하여 빼는 원리입니다.
반복문 시작 전 후로 현재 시간을 구하여 빼는 원리입니다.
TITLE Link Library Test #3 (TestLib3.asm) ; Calculate the elapsed time of executing a nested loop
INCLUDE Irvine32.inc
OUTER_LOOP_COUNT = 3 ; adjust for processor speed
.data
startTime DWORD ?
msg1 BYTE "Please wait...", 0dh, 0ah, 0 ; 0dh,0ah 는 개행문자입니다.
msg2 BYTE "Elapsed milliseconds: ",0
.code
main PROC
mov edx, OFFSET msg1 ; "Please wait..."이라는 문자열을 edx 에 넣습니다.
call WriteString ; 문자열 출력 - edx에 있는 주소의 문자열을 출력합니다.
; Save the starting time.
call GetMSeconds ; GetMSeconds - 자정 이후를 msec 단위로 계산하여 eax로 리턴
mov StartTime, eax ; eax 에 리턴된 값을 StartTime에 넣는다.
mov ecx, OUTER_LOOP_COUNT ; ecx - loop를 반복할 횟수를 넣어줌.
; Perform a busy loop.
L1:
call innerLoop ; innerLoop PROC 을 세번 호출한다.
loop L1
; Display the elapsed time.
call GetMSeconds ; 위의 루프가 끝나면 다시 한번 현재 시간을 구합니다
sub eax, startTIme ; 현재 시간에서 루프 시작하기 전 시간을 빼줍니다
mov edx, OFFSET msg2 ; "Elapsed milliseconds: "의 오프셋을 edx에 저장
call WriteString ; edx에 저장된 문자열 출력
call WriteDec ; eax에 있는 루프 도는데 걸린 시간 값을 출력
call Crlf ; 개행문자
exit ; main PROC 종료
main ENDP
innerLoop PROC ; innerLoop Proc 정의
push ecx ; 이전 루프에서 ecx가 사용되고 이번에도 사용되므로 스택에 저장함
mov ecx, 0FFFFFFFFh ; 반복 횟수를 FFFFFFFFh 로 지정
L1: ; L1 루프
mov eax, eax ; eax를 eax로 이동시키는 아무 의미 없는 코드 삽입
loop L1 ; L1 처음으로 .
pop ecx ; 루프가 끝나면 이전 ecx를 스택에서 꺼내서 복원시킵니다
ret ; innerLoop Proc 을 리턴합니다.
innerLoop ENDP
END main
|
'Programming > Assembly' 카테고리의 다른 글
어셈블리어 명령어 정리 (0) | 2012.01.26 |
---|---|
[인텔 기반 컴퓨터를 위한 어셈블리 언어] 문자열을 역순으로 배치하기 (0) | 2012.01.23 |
[인텔 기반 컴퓨터를 위한 어셈블리 언어] 난수(Random) 생성 (0) | 2012.01.23 |
[인텔 기반 컴퓨터를 위한 어셈블리 언어] 5.3.3 라이브러리 테스트 프로그램 (0) | 2012.01.23 |
[인텔 기반 컴퓨터를 위한 어셈블리 언어 5판]연습문제 풀이 4장 (0) | 2012.01.23 |