Hey, ich habe gerade das Problem, dass ich eine Funktion habe, die Werte in andere drei andere Funktionen zur Berechnung senden soll, dies wird alles in einer schleife passieren müssen. Meine Frage wäre nun, wie stelle ich dies am besten an ohne mir das ra Register dauernd zu überschreiben? Die Idee wäre: loop: ...Code addi $sp,$sp,-4 # Pointer auf den Stack sw $ra,($sp) # Speicherung der aktuellen Adresse aufm Stack jal Funktion 1 # Aufruf der Funktion 1 move $t1,$v1 # Speicherung des übergebenen Wertes lw $ra, ($sp) # Wiederherstellung der alten return Adresse addi $sp,$sp,4 # POP ...Code End_loop: jr $ra So, nun will man damit arbeiten und es funktioniert ohne Probleme, auch in der Schleife. Problematisch wird es, wenn man eine zweite und dritte Funktion aufrufen will, hier scheint sich alles zu überschreiben. Leider bin ich noch unerfahren mit den Stacks hier, was muss man machen damit man nach dem ersten Aufruf der FKT1 noch einen zweiten und dritten von zwei weiteren Funktionen implementieren kann, ohne dass sich alles überschreibt? Danke im Voraus
Dein Ansatz ist schon korrekt. Wenn dir nicht irgend eine nachfolgende funktion den Stack versaut, sollte es auch so passen. Tip: mal mit "mips-elf-objdump -S elffile" o.ä. ein compiliertes C-Programm in Assembler ausgeben. Oder gleich qemu-mips und GDB anwerfen, da lässt sich beim Single-Steppen viel lernen. Für Windows-User gibt's da auch fertige Entwicklungssysteme als Docker-container, ich poste jetzt mal keine Links, da die Auswahl recht gross ist.
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.