JMP - nepodmíněný skok

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
Instrukce
JMP - nepodmíněný skok
Časování
7-183 (80286), 7-268 (80386)
Popis
Instrukce JMP predáva řízení programu na jinou instrukci, přičemž není uchovávaná žádna informace o návratu. JMP provádí intrasegmentové přímé a nepřímé skoky a mezisegmentové skoky. Intrasegmentové přímé skoky používají offset umísteny ihned za instrukci. Intrasegmentové nepřímé skoky užívají obsahu paměťového místa adresovaného byty, které nasledujíci po instrukčním byte. Když je instrukce intrasegmentovým přímým skokem, vzdálenost od konce instrukce k cílovému návěstí je pričtena k IP (EIP). Mezisegmentové skoky nahrazují obsah registru CS. Pro příme skoky je to zajištěno druhým slovem nasledujícim instrukci. Pro skoky nepříme je registr CS nahrazen druhým slovem nasledujícim po naznačené adrese dat (viz příklady).


Syntaxe
JMP (target)


Ovlivňuje příznaky
Pri přepnutí úlohy (task switching) jsou ovlivneny všechny příznaky; jinak nedochází k ovlivnení žádnych příznaků.


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Jestlize je typ skoku NEAR, múže byt generovaná všeobecná výjimka porušení ochrany paměti v případe, že offset místa určení je mimo hranice aktuálního segmentu CS. Jestliže je typ skoku FAR, múže být generovaná také všeobecná výjimka ochrany. Jiné možné výjimky jsou: "deskriptor není přítomen", "chyba zásobníku", "neplatný stavový registr úlohy". Jestliže je u intersegmentového nepřímého skoku operandem registr, je generována výjimka "nedefinovaný operační kód".


Výjimky v reálnem módu
Jakmile je v případe nepřímého intersegmentového skoku operandem registr, je generováná výjimka "nedefinovaný operační kód".


Poznámka pro 80386
Je použit 32-bitový rozšírený ukazatel instrukce. Ukazatelové operandy jsou 48-bitové a jejich přemístení jsou 32-bitová.


Příklad

Intersegmentový prímý skok:

 JMP FAR_LABEL


Intersegmentový neprímý skok:

 JMP TABLE[BP][DI]
 JMP TABLE[EBP][EDI] ; jen pro 80386


Intrasegmentový prímy skok:

 JMP NEAR_LABEL


Intrasegmentový neprímý skok:

 JMP WORDPTR[BX][DI]