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

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

Dieses Thema im Forum "MacUser Bar" wurde erstellt von Saski, 26.05.2005.

  1. Saski

    Saski Thread Starter MacUser Mitglied

    Mitglied seit:
    06.02.2005
    Beiträge:
    644
    Zustimmungen:
    0
    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