tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1286
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Hi,
    ich schreibe grade an einem kleinen BS in Assembler (mit NASM-Code) und möchte dafür einen Timer verwenden.
    Bei meinen bisherigen Suchen kam heraus, dass ich mit org 0Bh einen Interrupt festlegen kann, welcher den Timer verwaltet. (Stimmt das?)
    Dazu habe ich folgendes programmiert:
    Code :
    1
    2
    3
    4
    
    org 0Bh
    jmp timerint
    timerint:
    ;...Code...
    Aber der Code wird nicht ausgeführt. Woran liegt das?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  2. #2
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Für den Timer muss man doch einen Interrupt-Behandler einrichten.
    Wie funktioniert das?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  3. #3
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Ich stell hier nochmal die Frage, wie man auf einen Interrupt reagieren kann.
    Wie kann man dafür eine eigene Funktion einbauen?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  4. #4
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Ich habe es jetzt dank der Hilfe von SGC-Fireball geschafft!

    Jetzt habe ich aber leider ein weiteres Problem. Ich möchte mit dem INT 1Ah und AH = 0h die Uhrzeit auslesen, jedoch wenn ich mit Bochs das OS starte, ohne dass die Funktion überhaupt ausgeführt wird, kommt diese Fehlermeldung:
    00014376399e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376401e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376403e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376405e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376407e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376409e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    00014376411e[CPU0 ] prefetch: EIP [00010000] > CS.limit [0000ffff]
    ...
    Wie kann ich das verhindern?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  5. #5
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Für alle, die der Code interessiert, poste ich ihn hier mal:
    Code asm:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    register_interrupt:
        push dx
        push es
        xor ax, ax
        mov es, ax
        cli
        mov word [es:1ch*4], _int0x1c  ; Pointer auf den Handler
        mov [es:1ch*4+2], cs           ; Pointer auf CS
        sti
        pop es
        pop dx
        ret
     
    _int0x1c:
        _int0x1c_ser0x01:       ; funktion 0x01
            cli                           ;Interrupts ausschalten
            mov si, Meldung
     
        _int0x1c_ser0x01_start:
             lodsb                   ; nächstes Byte laden
             or  al, al              ; 0-Byte?
             mov ah, 0x0E            ; BIOS Teletype
             mov bh, 0x00            ; Page 0
             mov bl, 0x07            ; Text-Attribute
             int 0x10                ; BIOS-Call
             jmp _int0x1c_ser0x01_start
        _int0x1c_ser0x01_end:
            sti
            jmp _int0x1c_end
     
        _int0x1c_end:
            iret
     
    ;Zur Registrierung der Interrupt-Routine: 
    call register_interrupt



    Die Ausgabe ist zwar unsinnig (erst der Text, dann nur noch "S ", beim Kopieren aus Bochs dann plötzlich "Sÿ"), aber wichtig ist ja, dass das unabhängig vom eigentlichen Code läuft. Der Inhalt des Interrupt Handlers ist ja dann beliebig veränderbar.
    Druecken Sie eine Taste, um das OS zu starten.
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ
    SÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿSÿ

    An dieser Stelle nochmal die Frage, warum beim Auslösen des Interrupts 1A in Bochs diese seltsame Fehlermeldung kommt.

    PS: Echt klasse, dass es hier sogar ASM-Syntax Highlighting gibt.
    Ein Assembler-Unterforum wäre auch klasse!
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

Ähnliche Themen

  1. [Assembler] Eigenes Betriebssystem unter VirtualBox
    Von Jellysheep im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 03.11.09, 09:15
  2. Eigenes Betriebssystem ohne Assembler
    Von xp_user im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 05.08.07, 22:43
  3. Assembler Betriebssystem
    Von Iron-Rose im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 28.05.05, 17:03
  4. Problem mit Assembler ( NASM )
    Von Stephan Boettcher im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 07.05.05, 15:46
  5. Assembler - NASM läuft nicht! Newbie braucht Hilfe
    Von nepenthes im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 19.10.03, 20:28

Stichworte