Ja, hat es. jmp steht für jump, engl. to jump = springen. jmp sorgt dafür, dass der Prozessor zur angegebenen Speicheradresse springt.
Ein kleines Beispiel:
mov eax, 0xDEADC0DE
jmp testlabel
mov eax, 0xDEADBEEF
testlabel:
#irgendetwas...
Die Prozessor wird zuerst "mov eax, 0xDEADC0DE" ausführen, danach findet er jmp (das Label ist natürlich in der Maschinensprache nicht mehr vorhanden, sondern wird durch die entsprechende Adresse ersetzt) und überspringt den zweiten mov-Befehl.
Würde der Prozessor keine Sprünge kennen, hätten wir am Schluss 0xDEADBEEF in eax, da der Prozesor aber ein braver Kerl ist und unseren Befehlen gehorcht, steht da auch schön 0xDEADC0DE drin.
Sprünge sind immer dann notwendig, wenn du von einer strikt linearen Programmausführung abweichen willst, d.h. bei Verzweigungen (if) brauchst du Sprünge, ebenso bei Prozeduraufrufen.
Allerdings gibt es mehrere Sprungbefehle, je nachdem warum genau du springen willst. Für Prozeduraufrufe z.B. gibt es afaik "call", welches dir eine Rücksprungadresse auf den Stack legt (schließlich möchte deine Prozedur die Kontrolle auch zurückgeben), dann gibt es noch bedingte Sprünge, d.h. der Prozessor wird nur springen, wenn bestimmte Flags gesetzt sind o.Ä.
P.S: Der Assembler-Code ist ohne jegliche Gewähr, ich hab in letzter Zeit mehr mit MIPS-Assembler als mit x86-Assembler zu tun.