JMP (x86-instruktion)
I assemblerspråket x86 utför JMP -
instruktionen ett ovillkorligt hopp. En sådan instruktion överför flödet av exekvering genom att ändra programräknaren . Det finns ett antal olika opkoder som utför ett hopp; beroende på om processorn är i verkligt läge eller skyddat läge , och en åsidosättningsinstruktion används, kan instruktionerna ta 16-bitars , 32-bitars eller segment:offset- pekare .
Det finns många olika former av hopp: relativa, villkorade , absoluta och registerindirekta hopp .
Följande exempel illustrerar:
- ett relativt hopp med en 16-bitars pekare;
- ett långt hopp (inter-segment), ett relativt hopp med en 32-bitars pekare;
- och ett register-indirekt absolut hopp med hjälp av EAX-registret .
(Observera att även om de första och andra hoppen är relativa, visas vanligtvis destinationsadressen istället för den relativa offset som kodats i opkoden.)
Exempel ett: Ladda IP med det nya värdet 0x89AB
, ladda sedan CS med 0xACDC
och IP med 0x5578
.
JMP 0x89AB JMP 0xACDC : 0x5578
Exempel två: Ladda EIP med värdet 0x56789AB1
, endast i skyddat läge eller overkligt läge .
JMP 0x56789AB1
Exempel tre: Hoppa till värdet lagrat i EAX-registret, endast i skyddat läge.
JMP EAX