2011-01-15 2 views
0

파일 읽기 및 쓰기 인터럽트를 호출 할 8086 어셈블리 코드가 있습니다. TASM을 사용하여 프로젝트를 링크하고 빌드합니다. 실행에 걸리는 시간을 측정하는 데 사용할 수있는 옵션은 무엇입니까? 나는 하드 드라이브를 읽는 시간을 기다리고 있다면 클럭 사이클을 계산할 수 있다고 생각하지 않는다.8086 어셈블리 : 코드의 실행 시간 결정?

편집 : 소프트웨어 권장 사항, 나는 당신이 OProfile에 또는의 VTune 같은 프로파일을 사용하거나 전에 함수 후 gettimeofday를 호출 할 수

+0

Win7에서 실행되는 DOS 프로그램을 작성하고 있습니까 ??? – Gabe

+0

나는 잠재력을 보여주기 위해 어셈블리에 알고리즘을 작성 중이다. 플랫폼 인 Windows 7은 제 컴퓨터가 실행되는 플랫폼입니다. 이것은 개념 증명 프로그램과 같습니다. –

답변

1

얼마나 정확한지와 얼마나 많은 문제가 있는지에 달려 있습니다.

파일 읽기 및 쓰기를 위해 인터럽트를 호출한다고합니다. 난 당신이 오래된 INT 21H 인터럽트 기능을하고 있다고 가정합니다. INT 21H 기능 2Ch는 대략 5/100 초까지 정확한 시간을 반환합니다. 자세한 내용은 http://spike.scu.edu.au/~barry/interrupts.html#ah2c을 참조하십시오.

Windows API 함수를 호출 할 수 있으면 QueryPerformanceCounter으로 전화하여 시간을 계산하려는 코드의 시작 부분에 틱 수를 얻을 수 있습니다. 나중에 함수를 다시 호출하고 끝에서 시작 부분을 뺀 다음 결과를 QueryPerformanceFrequency의 반환 값으로 나눕니다.

물론 64 비트 산술 연산이 필요합니다.

GetSystemTime API 함수를 호출하여 채우는 SYSTEMTIME 구조체를 전달하면됩니다. 또는 timeGetTime으로 전화를 걸면 컴퓨터가 시작된 이후의 시간 (밀리 초)이 반환됩니다. 49 일이 지나면 뒤집어 질 것이기 때문에주의해야합니다.

아마도 다른 방법도있을 수 있습니다. 그러나 INT 21H 함수를 호출하는 경우 가장 간단한 방법은 함수 2CH 만 사용하는 것입니다.

2

윈도우 7을 실행 해요 당신을 말해야한다.

저는 보통 인텔 VTune 성능 프로파일 러와 calltree를 사용하고 있습니다. 그것은 당신의 코드와 함수의 총 시간에 소비 된 시간을 보여줄 수 있습니다.

+0

+1 또는 타이머 인터럽트를 호출하고, 반환 된 값을 저장하고, 파일에 읽기/쓰기를 수행 한 다음 해당 인터럽트를 다시 호출하고 값을 빼면됩니다. Naa, 솔루션이 더 좋음;) – BlackBear

0

RDTSC 명령은 매우 정확한 타이밍 정보를 제공하지만 최신 OS 및 CPU에서는 조금 떨어집니다. 자세한 정보는 Wikipedia 페이지를 참조하십시오 (또는 Google for RDTSC) : http://en.wikipedia.org/wiki/Time_Stamp_Counter 가능하면 QueryPerformanceCounter/QueryPerformanceFrequency 용 Win API를 사용하면 더 안전 할 수 있습니다 (오버 헤드가 더 많을 수 있습니다. 아주 미세한 타이밍이 필요할 것 같은데?).

VTune과 달리 AMD CodeAnalyst도 무료이므로 확인하십시오.