Autor Thema: Problem mit GCC Inline Assembly  (Gelesen 2275 mal)

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« am: 22. March 2005, 13:57 »
Hallo :)
Ich bin soeben dabei, mal meine Exceptions zu schreiben und da ich nicht extra ein Asm-Modul dazulinken will wollte ich dies ganz in Inline-ASM machen, so:

asm volatile
(
"pusha \n"
"push %%gs \n"
"push %%fs \n"
"push %%ds \n"
"push es"
);

/* Isr-Code. */

asm volatile
(
"pop %%es \n"
"pop %%ds \n"
"pop %%fs \n"
"pop %%gs \n"
"popa"
);
}

Tja, doch wenn ich das Compillieren will, sagt gcc:

/tmp/ccPfBEsA.s:619: Error: bad register name `%%gs'

(logischerweise für jedes Auftregen eines registernamens, nicht nur für "gs".)
Doch soweit ich weiß, ist das die korrekte Schreibweise für GCC-Inline-Asm oder etwa nicht?

Vielen Dank für die Antworten im vorraus :)

Jidder

  • Administrator
  • Beiträge: 1 624
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 22. March 2005, 14:13 »
IIRC musst du statt "push" und "pop" "pushw" bzw "popw" schreiben.
Dieser Text wird unter jedem Beitrag angezeigt.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 22. March 2005, 19:29 »
Dann kommt immer noch die gleiche Nachricht, hat irgendjemand noch eine Idee?

EDIT: strange...wenn ich jeweils nur 1 % nehme klappt es soweit, nur beschwert ich dann der Compiler über etwas das VIEL weiter unten ist:

asm volatile
(
"movw %cs, %0 "
: "=g" (Selector)
);

mit


gcc -ffreestanding -c kernel/Idt.c -o Idt.o -I ./kernel
kernel/Idt.c: In Funktion »NewInterrupt«:
kernel/Idt.c:524: error: ungültiges »asm«: Operandenzahl fehlt hinter %-Buchstabe
make: *** [idt] Fehler 1
strawberry:/home/pah/Documents/Software/osdev/helios#

Hat vielleicht jemand ein gutes Inline-ASM tut? Ich habe es gerade noch geschafft, dieses Bisschen Code zusammen zu bekommen, ansonsten kann ich zwar ASM aber von Inline-ASM habe ich keine Ahnung.

Jidder

  • Administrator
  • Beiträge: 1 624
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 22. March 2005, 19:39 »
mov cs, irgendwas gibt es nicht. da musst du schon einen jmp, call, ret, etc. nehmen

Zitat von: Another Stupid Coder
Hat vielleicht jemand ein gutes Inline-ASM tut?


http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Dieser Text wird unter jedem Beitrag angezeigt.

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #4 am: 22. March 2005, 20:04 »
ausserdem statt %0 $0 falls du 0 ins cs haben willst (warum eignetlich?)

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 22. March 2005, 20:24 »
0 sollte die Parameter# sein.

@PorkChicken das hat aber schon gefunzt, glaub ich O_O

 

Einloggen