Gast
#1753529
Moin, es handelt sich um einen ATMEGA8 in Assembler. Mein Problem ist folgendes: Ich rufe ein Unterprogramm via rcall auf. Dieses Unterprogramm dient zur Ausgabe einer Zahl auf einem LCD. Also Umwandlung in ASCII Code. Das Unterprogramm beinhaltet weitere Unterprogramme. Die Zahl wird mit Komma und entsprechendem Präfix ausgegeben. Dementsprechend müssen nicht alle Stellen in ASCII-Code gewandelt werden. Dass als kurze Hintergrundinfo. Hier beginnt nun mein Problem. Ich möchte also vorzeitig aus meinem Unterprogramm zurückkehren. Mit einem einfachen ret ist das ja nicht getan, da sich der Stackpointer nicht an der richtigen Stelle befindet. Irgendwie erscheint es mir etwas unschön den Stackpointer manuell auf den richtigen Wert zu setzen. Momentan handhabe ich das aber mangels anderer Kenntnis so. Dazu speichere ich die Adresse des Stackpointers - zu der ich später zurückkehren möchte - zu Beginn des Unterprogramms im RAM. Also genau dann, wenn ich mich im Programm an dieser Stelle befinde. Wenn ich das Unterprogramm verlassen möchte, da genügend Ziffern berechnet wurden, lade ich den Stackpointer mit dem zu Beginn gespeicherten Wert aus dem RAM. Nun reicht mir ein ja einfaches ret und ich gelange in mein Hauptprogramm zurück. Wie kann ich das verbessern? Gruß Michael