Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Programm Noob am 28. October 2009, 19:34

Titel: [gelöst] ASM in C
Beitrag von: Programm Noob am 28. October 2009, 19:34
Hallo

Ich habe ein Problem, ich würde gerne diese ASM Funktion in meinem C Kernel aufrufen.
rebootasm:
db 0EAh
dw 0000h
dw 0FFFFh
Kann ich die in eine C Funktion einbinden? Wenn Ja, wie?

Programm Noob
Titel: Re: ASM in C
Beitrag von: Jidder am 28. October 2009, 19:58
Wenn du immer noch den GCC (oder irgendeinen anderen 32-Bit-Compiler) nutzt, dann lautet die Antwort nein.
Titel: Re: ASM in C
Beitrag von: Programm Noob am 28. October 2009, 20:02
Moin

ja ich nutze gcc, kann ich denn trotzdem irgenwir aus meinem c kernel heraus diese oder andere ASM Funktionen aufrufen?

Programm Noob
Titel: Re: ASM in C
Beitrag von: Jidder am 28. October 2009, 20:48
Ja, Assemblerfunktionen kannst du aufrufen. (Diese Funktion aus dem ersten Post wird nicht funktionieren, weil das Code für den Real Mode ist.)

In die C-Datei schreibst du dazu:

// eine Funktion ohne Rückgabewert und ohne Parameter
// das extern bedeutet, dass die Funktion in einer anderen Datei steht
extern void beispiel();

void test()
{
     // die Assembler-Funktion aufrufen
     beispiel();
}

Und in die Assembler-Datei

// NASM Syntax
section .text

// die Funktion für Code in anderen Dateien sichtbar machen
global beispiel

beispiel:
     // code der assemblerfunktion
     ret
Titel: Re: ASM in C
Beitrag von: XanClic am 28. October 2009, 21:25
Da ich annehme, dass du den Computer neu starten willst, bin ich mal so frei, dir Code zu geben, der wohl immer funktionieren sollte:
rebootasm:
mov al,0xFE
out 0x64,al

Deine Funktion springt nämlich afaik in den BIOS-Einsprungspunkt nach einem CPU-Reset und simuliert so einen Reset. Das funktioniert aber nicht, wenn die CPU sich im 32-Bit-Modus befindet, da das BIOS davon ausgeht, im Real Mode ausgeführt zu werden. :wink:
Titel: Re: ASM in C
Beitrag von: Programm Noob am 29. October 2009, 13:20
Moin
@ PorkChicken
Muss ich dann die asm datei zu einer .obj machen und die dann wie eine c datei linken?  :?

@ XanClic
Danke der Code funzt.

Programm Noob
Titel: Re: ASM in C
Beitrag von: Jidder am 29. October 2009, 13:21
@ PorkChicken
Muss ich dann die asm datei zu einer .obj machen und die dann wie eine c datei linken?  :?
Jop.