S
Saski
Aktives Mitglied
Thread Starter
- Dabei seit
- 06.02.2005
- Beiträge
- 658
- Reaktionspunkte
- 0
NACHTRAG: Hat sich schon erledigt *g*
Huhu
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:
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:
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?
Saski bunny
Huhu
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);
Code:
int accu;
__asm__("movb $0xC0, %ah\n\t"
"int $0x15"
:"=a"(accu)::"%eax");
printf("EAX: %Xi\n", accu);
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?
Saski bunny
Zuletzt bearbeitet: