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:

  1. ett relativt hopp med en 16-bitars pekare;
  2. ett långt hopp (inter-segment), ett relativt hopp med en 32-bitars pekare;
  3. 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 

externa länkar