[Asm] Procedura Sleep

0

Czy wie ktoś jak zrobić w Asemblerze procedurkę, co by wykonywała pustą pętlę przez x milisekund:

procedure Sleep(X: Cardinal);
asm
  // <-- Tu ma być to czego nie wiem
end;

Chodzi oczywiście o wstawkę w Delphi, no nie? Będe wdzięczny za pomoc.

0

Po co ci to w Delphi?

procedure Sleep(X: Cardinal);
asm
  push X
  call Sleep //ew. z @
end;

Ale jak dla mnie to troche bez sensu... Lepiej jest wykorzystac Timer.

0

Po co ci to w Delphi?

Mam procedurkę w D. do sprawdzania zagara CPU o w tej procedurze muszę zatrzymać wykonanie na ok 500ms i by było bardzuej optymalnie chcę Sleep nie w D. tylko w Asm.

Ale jak dla mnie to troche bez sensu... Lepiej jest wykorzystac Timer

Możliwe, że bez sensu, a ten Timer to w Asm? Asm jeszcze nie umiem - dopiero się uczę.

0

Ale jak dla mnie to troche bez sensu... Lepiej jest wykorzystac Timer

Możliwe, że bez sensu, a ten Timer to w Asm? Asm jeszcze nie umiem - dopiero się uczę.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/settimer.asp

Ale ja bym nie polegal na zadnej metodzie odmierzania czasu w ten sposob... Windows jest systemem wielozadaniowym i nigdy nie uzyskasz takiego. Najlepszym sposobem wyznaczenia zegara CPU, jaki mi przychodzi do glowy jest:

  1. Pobrac aktualny czas (T1)
  2. Odczytac licznik cykli przez RDTSC (C1)
  3. Wykonac jakies w miare dlugie operacje
  4. Odczytac akutalny czas (T2)
  5. Odczytac licznik cykli (C2).
    Wyznaczyc czestotliwosc (C2-C1)/(T2-T1).
    Oczywiscie najlepiej przeprowadzic kilka takich pomiarow i wyciagnac jakas srednia.
    Ew. mozna poszukac czy przy CPUID cos o czestotliwosci nie ma.

/* Ciekaw jestem, jak win liczy czestotliwosc, bo mi zawsze 801MHz wskazuje :P */

0

Na razie zostanę przy mojej procedurze, bo jest w miarę dokładna (błąd pomiariowy do 1 Mhz). A jak już się vaumiemm zrobię po twojemu :)

Mam jeszcze jedno pytanie: na czas działania proc. liczącej ustawić priorytet na real-time [???]

1 użytkowników online, w tym zalogowanych: 0, gości: 1