Mit diesem Befehl kann der Adresspointer auf einen neuen Wert gesetzt werden. Dadurch springt die Programmausführung an diese neue Adresse.
Die verschiedenen JMP-Befehle stehen auf verschiedenen Prozessortypen in Abhängigkeit des vorhandenen Adressraums zur Verfügung.
JMP: Spungbefehl innerhalb eines 4MWords (=8MByte) Adressraums.
RJMP: Spungbefehl innerhalb eines 4kWords (=8kByte) Adressraums (±2kWords). Dieser Befehl hat zwar eine eingeschränkte Sprungweite, ist jedoch platzsparender und schneller als der JMP-Befehl.
IJMP: Indirekter Spungbefehl auf die Adresse die im Z-Pointer (PC(15:0)) geladen ist. Dieser Befehl kann nur eine 16-Bit Adresse (innerhalb des unteren Adressbereichs) ansprechen. Es sind 64kWords (=128kByte) ansprechbar, da Adressen immer wortweise adressiert werden.
EIJMP: Erweiterter indirekter Spungbefehl innerhalb eines 4MWords (8MByte) Adressraums. Zu dem Z-Pointer wird das EIND-Register für die oberen Adressbits (PC(21:16)) hinzugenommen. Der Befehl ist nur auf Prozessoren mit mehr als 64kWords Adressraum vorhanden.
jmp Label ;Sprung auf die Adresse, die im Code mit 'Label:' gekennzeichnet ist
rjmp Label ;Sprung auf die Adresse, die im Code mit 'Label:' gekennzeichnet ist. Funktioniert nur, wenn das Label innerhalb von ±2k-Adressen vor oder hinter dem Sprungbefehl ist.
ldi ZH, high(Label<<1)
ldi ZL, low(Label<<1)
ijmp ;Sprung auf die Adresse, die im Z-Pointer ist
ldi r0, page(Label<<1) ;Hier werden die Bytes 21-16 einer Adresse geladen
out eind, r0 ;Speichern im EIND-Register
ldi ZH, high(Label<<1) ;Laden von high und low-Byte der Adresse
ldi ZL, low(Label<<1)
eijmp ;Sprung auf die Adresse, die im Z-Pointer und im EIND-Register ist