Wie kann man aus Assembler C aufrufen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der C-Code wurde compiliert und in Assembler übersetzt.

Was dann geschiet ist ein Funktionsaufruf. Wie dre stattfindet hängt vom jeweiligen Assembler-Dialekt ab.

theCPP 
Fragesteller
 31.01.2022, 15:56

Danke für die schnelle Antwort, ich meine, dass wenn man zum Beispiel ein Betriebssystem schreibt, compiliert man den C-Code ja eigentlich nicht zu Assembler und schreibt dann die Kernel Funktionen rein. Und ich möchte im Assembler ein Programm schreiben, was ein externes C-Programm automatisch aufruft.

1
Destranix  31.01.2022, 15:58
@theCPP
wenn man zum Beispiel ein Betriebssystem schreibt, compiliert man den C-Code ja eigentlich nicht zu Assembler

Doch! Sonst wirst du das kaum in Byte-Code und lauffähig auf deiner Maschine bekommen.

Und ich möchte im Assembler ein Programm schreiben, was ein externes C-Programm automatisch aufruft.

Das dürfte komplizierter sein. Da müsste man je nach Compiler und Linker schauen, wie die Funktion dann heißt, sodass du sie in Assembler aufrufen kannst.

0

Der Kernel wurde vielleicht mal in C geschrieben, aber wurde danach zuerst in Assembler und schliesslich in Maschinencode compiliert.

Der CPU ist es egal in welcher Sprache die Software geschrieben wurde, sie kennt nur Maschinencode.

Soweit ich weiss kannst du in Assembler nicht direkt ein C-Programm aufrufen. Dazu müsstest du das C-Programm zuerst in Assembler compilieren.

Wieso willst du überhaupt Assembler und C Code mischen? Entweder du schreibst alles in Assembler oder in C...

Danke für eure Lösung.

Ich habe herausgefunden, dass man die C-Datei zu einer Objekt Datei compilieren muss und sie dann mit der Objekt Datei des compilierten Assembler-Programms zusammen tun muss.

Assembler-Code:

extern Funktionen_Name
call Funktionen_Name

Als Befehle muss man (unter Windows):

gcc datei-Name.c -o datei-Name.o
nasm -f win64 datei-Name.asm -o datei-Name.o
copy /b datei-Name.o + /b datei-Name.o

Dann hat man die Objekt-Datei