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

S

Saski

Aktives Mitglied
Thread Starter
Dabei seit
06.02.2005
Beiträge
658
Reaktionspunkte
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
 
Zuletzt bearbeitet:
Zurück
Oben Unten