Forum: Compiler & IDEs C-Funktion aus Assemblerdatei aufrufen


von mr.chip (Gast)


Lesenswert?

Hallo

Wie kann ich aus einer Assemblerdatei (my.s) eine C-Funktion in meiner 
C-Datei (my.c) aufrufen? Umgekehrt ist es ja kein Problem, ich definiere 
sie im C-File als 'extern', implementiere die Funktion im 
*.s-Assembler-File und kann sie dann im C-File wie eine ganz normale 
Funktion aufrufen.

Gruss

Michael

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Mit CALL oder RCALL, wie sonst?  Die Argumente musst du natürlich
selbst zusammenpusseln.  Falls du über AVR-GCC sprichst, steht die
ABI-Beschreibung in der (avr-libc-)FAQ.

von mr.chip (Gast)


Lesenswert?

Hallo

> Mit CALL oder RCALL, wie sonst?  Die Argumente musst du natürlich
> selbst zusammenpusseln.  Falls du über AVR-GCC sprichst, steht die
> ABI-Beschreibung in der (avr-libc-)FAQ.

Logisch mit CALL oder RCALL ;-) Argumente ist auch kein Problem. Mein 
Problem: Woher bekomme ich die Sprungadresse? Im C-Disassembly könnte 
ich natürlich die Adresse meiner C-Funktion heraussuchen und dann direkt 
ins Assembler-File kopieren, aber das ist wohl weniger die Idee ;-)

Übrigens: Ja, geht um AVR-GCC. Ich schaue mir jetzt mal die 
ABI-Beschreibung an.

Gruss

Michael

von mr.chip (Gast)


Lesenswert?

> Übrigens: Ja, geht um AVR-GCC. Ich schaue mir jetzt mal die
> ABI-Beschreibung an.

Und ähm...wo finde ich die? Bin seit einer Viertelstunde am googeln, 
aber ich finde nix.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Woher bekomme ich die Sprungadresse?

Symbolisch, so wie der Compiler auch: du schreibst einfach den
Namen der Funktion als Ziel hin.  Der Linker kümmert sich dann
drum.

Das ging schon vor 20 Jahren unter CP/M. ;-)

> Und ähm...wo finde ich die?

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.