Sleep(); -> Assembler



  • Gibt es einen Assembler-Befehl, der das gleiche macht, wie die WINAPI-Funktion Sleep();?



  • Unter Windows kannst du ja einfach Sleep benutzen. Unter DOS gab's glaub ich auch sowas ähnliches, da bin ich mir aber nicht sicher. Zur Not kannst du ja einfach die Zeit in einer Schleife abfragen und somit ein wenig warten.



  • Ums präzise zu machen: nein einen dementsprechenden Assembler-Befehl direkt gibts nicht, jedoch stellt jedes OS irgendeine API (leider jeder anders) zur Verfügung um sowas zu machen.
    Ansonsten muss man wenn man wirklich nur asm zur Verfügung hat (und das ist eiegntlich nur beim slebstgebauten OS oder Bootsektor der Fall) entweder im Realmode solange ne Schleife ausführen, bis man eine Sekunde (o.ä.) rum hat (aktuelle Zeit vom BIOS erfragen) oder in jedem Mode einen Interrupthandler für den Timer-Interrupt installieren und zählen bis eine Sekunde (o.ä.) rum ist.



  • naja umd das ganze prozessor schonend zum achen sollte man den timerinterrupt ensprechen konfigurieren und den prozessor dazwischen mit hlt ein bisschen schlafen lassen



  • Original erstellt von japro:
    naja umd das ganze prozessor schonend zum achen sollte man den timerinterrupt ensprechen konfigurieren und den prozessor dazwischen mit hlt ein bisschen schlafen lassen

    Und wie mach ich das? Ich bin noch Anfänger.



  • Um genauer (und vielleicht auch einfacher verstaendlich) auf deine Frage antworten zu koennen, solltest Du erstmal mit mehr Infos rausruecken.
    z.B. waere es hilfreich zu wissen, in welchem Betriebssystem deine Anwendung laufen soll. 🙄



  • wie wäre das ganze unter z.b. dos möglich?



  • Am einfachsten geht das vermutlich ueber den Zeitzaehler an Addresse 0046Ch.
    Dieser Zeitzaehler wird ueber den IRQ0 aktualisiert, d.H. 21x pro Sekunde.
    Nun kann man den Wert zu Anfang des Delay speichern und warten, bis er 21x inkrementiert wurde, so hat man ein Delay von einer Sekunde...
    Nachteil an dieser Methode ist, dass das kleinst-moegliche Delay 1/21-Sekunde ist.

    xor ax,ax
    mov ds,ax
    mov al,[ds:046Ch]
    add al,15h
    @@Delay:
    cmp [byte ptr ds:046Ch],al
    jne short @@Delay
    


  • @Nobuo T:
    Danke! Genau das wollte ich haben! Danke!


Log in to reply