Im Grunde genügt es, sich selbst in den Zieladressbereich zu verschieben und neu zu starten.
Wär das einfacher? Schneller? Ginge auch nur, wenn Programmgröße < 1/2 freies RAM ist oder der Versatz < Programmgröße.
Bei "Überlappungen" von gewollter und tatsächlicher Position im RAM:
Offset < 0 - man müsste von "hinten" anfangen zu verschieben,
Offset > 0 - man müsste von "vorn" anfangen,
sonst Datenverlust.
Wenn es ein sehr kleines Programm ist, dann ist vielleicht einfacher, auf Sprünge zu verzichten. ![]()