Voll-OT: GCC-Inline-Assembler unter Linux auf x86

Diskutiere das Thema Voll-OT: GCC-Inline-Assembler unter Linux auf x86 im Forum MacUser Bar

  1. Saski

    Saski Thread Starter Mitglied

    Beiträge:
    661
    Zustimmungen:
    0
    Mitglied seit:
    06.02.2005
    NACHTRAG: Hat sich schon erledigt *g*

    Huhu :D

    Ich muss mit dem Wert 0xC0 im AH-Register Interrupt 15 aufrufen, und die Inhalte von AH und AL danach in Byte-Variablen speichern. Und das Ganze in einem C-Programm, das unter Linux auf einem PS/2 (PC-ähnlicher Rechner von IBM) läuft.

    Ich hab schon zwei Ansätze probiert:
    Code:
            char model, submodel;
    
            __asm__("movb $0xC0, %ah\n\t" 
                    "int $0x15\n\t" 
                    "movb %al, _model\n\t" 
                    "movb %ah, _submodel"); 
     
            printf("Model: %Xc, Submodel: %Xc\n", model, submodel); 
    
    Da werden die Variablen vom Assembler nicht erkannt. Ausserdem hab ich irgendwo gelesen, dass man den "Extended Inline Assembler" benutzen soll, damit man keine Registerinhalte kaputtmacht, so hab ich das jedenfalls verstanden. Also hab ich's nochmal so probiert:
    Code:
            int accu;
    
            __asm__("movb $0xC0, %ah\n\t"
                    "int $0x15"
                    :"=a"(accu)::"%eax");
    
            printf("EAX: %Xi\n", accu);
    
    Dort soll der Einfachheit halber der 32bit-Akku (EAX) in die Variable accu exportiert werden, und erst danach bearbeitet ... funktioniert aber auch nicht.

    Kann mir bitte Jemand einfach den funktionierenden Code geben, damit ich einfach an diesen dumme Rückgbabewert von Interrupt 15 komme, und das Programm dabei nach Möglichkeit nicht den Rechner zum Absturz bringt? :D

    Saski bunny
     
Die Seite wird geladen...

MacUser.de weiterempfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...