Sprung an eine Adresse im Programmspeicher

Gast #27542
Ähm - meinst Du jmp, ajmp bzw. call, acall ?
Willst Du dorthin springen, um dort die Programmausführung weiterlaufen 
zu lassen, Daten aus einer Tabelle lesen, Sprungtabelle - Mist, meine 
Glaskugel geht momentan nicht.
Gast #27543
nun gut, war vielleicht doch etwas allgemein formuliert!!

Ich möchte aus einer Applikation heraus direkt in eine neue Applikation 
springen in dem ich an die Startadresse der 2. Applikation springe.

die 2. Applikation hab ich compiliert, und die Hex-Datei mit einem 
Parallel-Programmer direkt an eine von mir festgelegte
Adresse gesetzt.

Habe es bereist mit den Assemblerbefehlen JMP LJMP, LCALL usw. 
probiert!!

Vieleicht beginnt die Abarbeitung dieser Datei ja nicht an der 1. 
Speicheradresse??
#27544
Das kann nie funktionieren !!!

Die 2. Funktion wird zwar korrekt ausgeführt, aber wenn sie zuende ist, 
weiß sie ja nicht mehr, wohin sie zurückkehren soll. Du hast sie ja mit 
einem JUMP angesprungen und nicht mit einem CALL.
Sie holt sich also die nächsten Bytes vom Stack und springt dorthin. Das 
ist aber keine Return-Adresse sondern gesicherte Variablen der 1. 
Funktion.
Sie springt also irgendwo hin.

Ein Jump (goto) ist also nur innerhalb einer Funktion zulässig.
Bzw. es gibt unter C die Möglichkeit über mehrere Instanzen zurück zu 
springen, aber nie nach vorne:

int setjmp(jmp_buf jmpb);
void longjmp(jmp_buf jmpb, int retval);



Peter
Gast #27545
jmp is fein, wenn, wie Peter sagt, Applikation 2 nicht zurück will oder 
mittels jmp Applikation1 zurückspringt.
Das Probelm, das ich vielmehr sehe ist: Hast du Applikation 2 für deine 
Startadresse compiliert? Wenn nicht, springt der arme uC wahrscheinlich 
kunterbunt duch seine Bytewiesen, sprich absolute Adressen in 
Applikation 2, die für Startadresse 0 compiliert wurde, verweisen jetzt 
(durch deine Verschiebeaktion) auf irgendein Ziel, mit Sicherheit aber 
nicht auf das, was gewollt war.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.