Programm anhalten (sleep?)



  • Hallo!

    Ich nutze nasm und weiß nicht, wie man ein Programmablauf verlangsamen kann.
    In C++ gibt es ja den befehl Sleep(xx), doch in Assembler finde ich keinen
    Aufruf.

    Dabei muss ich sagen, dass ich keine LIB's einbinden möchte.



  • Nimmste den Intel 8253/8254 Timer -> Google.

    HIH
    Greetz Swordfish



  • Delay schrieb:

    Ich nutze nasm und weiß nicht, wie man ein Programmablauf verlangsamen kann.
    In C++ gibt es ja den befehl Sleep(xx), doch in Assembler finde ich keinen
    Aufruf.
    Dabei muss ich sagen, dass ich keine LIB's einbinden möchte.

    Die Funktion "sleep()" gehört auch nicht direkt zur Sprache dazu, sondern versteckt sich in der C/C++ Standardbibliothek, welche auch eine lib ist...
    Mal abgesehen davon, für welches Betriehssystem (oder auch keins) willst du denn überhaupt programmieren?



  • bluecode schrieb:

    Delay schrieb:

    Ich nutze nasm und weiß nicht, wie man ein Programmablauf verlangsamen kann.
    In C++ gibt es ja den befehl Sleep(xx), doch in Assembler finde ich keinen
    Aufruf.
    Dabei muss ich sagen, dass ich keine LIB's einbinden möchte.

    Die Funktion "sleep()" gehört auch nicht direkt zur Sprache dazu, sondern versteckt sich in der C/C++ Standardbibliothek, welche auch eine lib ist...
    Mal abgesehen davon, für welches Betriehssystem (oder auch keins) willst du denn überhaupt programmieren?



  • Wenns für dein eigenes Betriebsystem sein soll, schau mal unter BIOS interrupts fals du im 16bit modus bist.
    Ansonsten bleibt noch ne busywait-schleife, das wäre natürlich die schelchteste lösung.

    Falls du unter einem betriebsystem operierst kannst du dich mal über systemcalls informieren.
    Da gibts bestimmt was für sleep



  • Ich habs jetz so gelöst, nicht die beste Lösung, ich weiß^^

    Delay:
        mov  ah,  00h 
        int  1Ah      
        add  dx,  50
        mov  ax,  dx
        mov  bx,  dx
        mov  cl,  3
    .DLY
        mov  ax,  bx
    
        push ax
        mov  ah,  00h 
        int  1Ah      
        pop  ax
    
        cmp  ax,  dx
        jnz .DLY
        ret
    


  • Jo, is nicht schlecht. Nur so als Tipp: Das BIOS hat in der BDA (BIOS Data Array, also irgendwo um Adresse 400h im Speicher -> google) seinen Zeitzaehler. Da kannst du ganz einfach einen Zeit-Code auslesen, ohne Interrupts verwenden, oder grossartig basteln zu muessen. 🙂


Anmelden zum Antworten