zu sprungmarke springen, und wieder zurück

Gast #47596
Lesenswert?
• ▲
▼
moin ihr helferchen!!

ich hab folgendes problem: ich will ein 48bit schieberegister (6x8bit)
ansteuern. dazu brauche ich einen trick, oder befehl, mit dem ich von
X nach Y springen kann, und nachdem Y ausgeführt wurde, wieder
nach X zurückkehrt. klingt einfach, aber es gibt ein hindernis:

während Y eine feste position hat, kann X überall sein. und ich
kann X nicht in X1 umbenennen, da ich ja sonst zu X1 auch ein
Y1 brauche, und das meinen programmrahmen sprengen würde. gibt es da
einen trick, mit einer variablen sprungmarke, die immer beim
"richtigen" X ist??

THX 4 HELP
Gast #47598
Lesenswert?
• ▲
▼
witzbold.. damit kann ich ja bloß zu einer sprungmarke springen, aber nt
zu meiner "absprungmarke" zurück...
RJMP bedeutet nämlich Relative Jump und nicht Rejump

und JMP gibts beim 2313 garnet...
Gast #47602
Lesenswert?
• ▲
▼
Hallo!
Ich glaube der Befehl den du suchst heisst "ret". Es ist der selbe
wie "reti", nur dass der dafür ist um aus Interrupt unterprogrammen
wieder zurück zu kommen und "ret" aus normalen Unterprogrammen. Für
diesen Befehl muss aber der Stackpointer richtig initialisiert werden!

Grüsse

Stefan P
Gast #47604
Lesenswert?
• ▲
▼
X_Marke1:
  ..
  RJMP Y_Marke


X_Marke2:
  ..
  RJMP Y_Marke

X_Marke3:

.
.
.

Y_Marke:

  LDI ZL, low (X_Marke..)
  LDI ZH, high (X_Marke..)

  IJMP  ;Sprung zu vorher definierter X-Marke (ist variabel und
        ;kann sich während der Laufzeit ändern)
Gast #47605
Lesenswert?
• ▲
▼
Hallo Skater,

freilich ist das ret variabel, aber das ist doch genau das, was du
suchtest. Du willst von verschiedenen Stellen nach Y springen und nach
der Ausführung dort an eben diese Stellen zurück. Genau dafür ist das
ret da und speichert eben jene Stelle aufm Stack. Wenn wir das, was du
schreibst nicht vollkommen falsch verstehen, ist es genau so wie Crazy
Horse schreibt: call - ret

Viele Grüße
Gast #47607
Lesenswert?
• ▲
▼
den Stack sollte man IMMER initialiesieren, selbst wenn er gar nicht
gebraucht wird, irgendwann kommt eine kleine Änderung, und schon steht
man auf dem Schlauch, weil man daran oft nicht denkt.

Ansonsten:
X1: call Y

X2: call Y

X3: call Y

Y:  irgendwas
    ret          //führt auf den Befehl zurück, der auf call Y folgt,
                 also X1+1 oder X2+1 oder X3+3, je nachdem, woher der
call kommt.

Das versuche ich dir die ganze Zeit zu verklickern, das ist doch
wirklich was grundlegendes, ich hatte noch nie ein Programm, dass ohne
calls auskam.
Gast #47609
Lesenswert?
• ▲
▼
@horse: da shab ich grad ausprobiert.. stellt sich bloß ein problem
dar:
wen ich das ganze Debug, bzw. assemble, dann kommt im bericht die
fehlermeldung:
WARNING: 'CALL' not supportet on this device...
naja... ich versuch jetzt des mal mit dem stack

@fino:
lach net, aber diese seite hab ich schon seit gestern gesuch..
alzheimer lässt grüßen...
Gast #47611
Lesenswert?
• ▲
▼
Hallo Skater,

jawohl der 2313 hat kein CALL. Da der Speicher mit 2k aber klein genug
ist, kann der gesammte Bereich mit RCALL adressiert werden.

Was du suchst ist also: RCALL

Dazu lohnt sich ein Blick in die vollständige Instruktionstabelle der
AVR und natürlich das Datenblatt des Einzeltyps (da steht dann
beispielsweise drinnen, dass es kein CALL gibt)

http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF


Viele Grüße
Gast #47612
Lesenswert?
• ▲
▼
so leute..VIELEN VIELEN DANK!!!

ich hab jetzt das ganze mit dem stack gemacht... gehtecht super... mein
programm besteht jetzt nur noch aus "recall ..." es wird ja also ne
uhr... für die schieberegister hat ich die bits in konstanten
gespeichert (0-9) ... echt klasse!!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.