JMP - nepodmíněný skok
Verze z 9. 11. 2012, 23:59, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (Vytvorená stránka „;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če...“)
- 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]