Forum: Mikrocontroller und Digitale Elektronik aus schleife zurückspringen in assembler


von Lazareth (Gast)


Lesenswert?

nabend!!!

entweder stehe ich gerade auf dem schlauch, oder ich habe etwas nicht 
verstanden. folgendes beispiel:

cpi r17, 158   ;vergleichen
brlo s12V      ;verzweigen
.
.
.
s12V:          ;hier her springen wenn kleiner als
sbi portd, 1   ;port d setzen
ret     <------;hier ist der fehler

bei diesem abschnitt springt mir der simulator wieder an den 
programmanfang, mit folgender fehlermeldung:

"AVR Simulator: Invalid opcode 0xffff at address 0x000879"

Stack ist initialisiert.

warum kann ich aus diesem abschnitt nicht mehr zurück springen?! mit 
brne/breq und co funktioniert es doch auch.

könnt ihr mir hier weiter helfen?! ich will nicht ständig irgendwo 
irgendwelche marken setzen, nur weil der zu blöd ist zurückzuspringen.

gruß

von holger (Gast)


Lesenswert?

Ich würds mal mit nem call versuchen.

von Breti (Gast)


Lesenswert?

Hi,

ist denn auf dem Stack auch eine Adresse wohin er zurückspringen kann? 
Sprich: Hast du deine Unterfunktion mit "Call" (oder wie dieser Befehl 
gerade in AVR Assembler heißt) aufgerufen? Ein simpler Branch/Jump legt 
dir nicht die Rücksprungadresse auf den Stack, sondern verzweigt nur im 
Programmfluss.

Gruß,
Thoaas

von Lazareth (Gast)


Lesenswert?

moin!!!

ok, ich danke euch, natürlich ein denkfehler von mir.
habe mit glück diese thematik meistens umgehen können :D

gruß

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.