Hallo,
Ich versuche unter Zuhilfenahme der Referenz meines Compiler Packages
eine ASM Routine von einer C Funktion aus aufzurufen. Die Übergabe der
Parameter funktioniert, allerdings habe ich es bisher nicht geschafft
einen Wert zurückzugeben.
Ich verstehe nicht an welchen Ort ich in den Stack schreiben muss, da
Fehler auftreten wenn ich den Speicher dort beschriebe (siehe Diagramm
in der Referenz, Figure 9.8 )
Muss ich den Stack speicher für den Rückgabewert selbst allocieren?
Aktueller ASM test Code:
.EXPORT _routine
.SECTION P,CODE,ALIGN=4
_routine:
;die ersten 4 parameter stehen in den Registern R4 bis R7,
;weitere würden im stack stehen
ADD R4,R5 ;Parameter 1 und 2 addieren, ergenis in R5
ADD R5,R6 ;R5 und Parameter 3 addieren, ergenis in R6
ADD R6,R7 ;R6 und Parameter 4 addieren, ergenis in R7
ADD #4,R15 ;setze den stack Pointer (= R15) in die nächste
speicherzelle
MOV.L R7,@R15 ;beschreibe die zelle mit dem ergebnis der
addition
RTS ;springe zurück
.END
Von C aus betrachtet:
extern int routine(int, int, int, int); //Prototyp
Das obige funktioniert (Register haben die korrkten Werte) bis auf das
schreiben des rückgabewertes. (ich habe auch schon begonnen zu
experimentieren und andere Adressen zu beschreiben, ohne Erfolg)
Was muss ich tun um einen Wert zurückzugeben?
(Ein versuch einen zeiger als parameter an die routine zu übergeben und
den zu beschreiben war auch erfolglos)
Verwendete Referenz:
http://documentation.renesas.com/eng/products/tool/rej10j1571_shc_v91um.pdf
ab Seite: 256, beginnt das Kapitel Linking C/C++ Programs and Assembly
Programs
Hardware: Renesas SH7201 Starter Kit, mit E8 JTAGemulator Programmer
Entwicklungsumgebung: High-performance Embedded Workshop, Version
4.05.01.001
Compiler: SuperH RISC engine C/C++ Compiler, Assembler, Optimizing
Linkage Editor Compiler Package V.9.01
Habe die Lösung mittlerweile erfahren. Der Rückgabewert steht bei Integern nicht im Stack sondern in einem Register (R0)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.