skok ak sú dve celé čísla rôzne
Jasmin Syntax
if_icmpne <label>
<label> je identifikátor návestia. Definuje miesto označenia, použitie <návestie> meno dvojbodka :
<label>:
<label> je potom spájaný s adresou nasledujúcej
inštrukcie. Návestia môžu mať pridelené len jedno miesto v metóde. Na druhej
strane, jednoduchý <label> môže byť cieľom mnohonásobných inštrukcií
skoku.
Zásobník
Pred |
Po |
value1 |
... |
value2 |
|
... |
|
Popis
if_icmpne vyberá z vrchola zásobníka dva integery
a porovná ich. Ak nie sú rovnaké,
vykonávanie sa rozdelí na adresy (pc + branchoffset), kde pc je adresa if_icmpne v bajtovom kóde a branchoffset je
16- bitový integer so znamienkom ktorý nasleduje kód if_icmpne . Ak sú rovnaké, vykonávanie pokračuje na nasledujúcej inštrukcii.
Ak používate Jasmin, branchoffset je
vypočítaný z adresy <label>.
Príklad
bipush 2 ; vloží int 2 do zásobníka
iload_1 ; Vloží int hodnotu z lokálnej premennej 1 do zásobníka
if_icmpne Label ; ak je hodnota lokálnej premennej 1 rôzna od 2, skoč na Label
return ; návrat ak lokálna premenná 1 = 2
Label:
; vykonávanie pokračuje tu ak lokálna premenná 1 rôzna od 2...
Bajtkód
Typ |
Popis |
u1 |
If_icmpne opcode = 0xA0 (160) |
s2 |
branchoffset |
Pozri
tiež
if_icmpeq,
if_icmplt,
if_icmpgt,
if_icmple,
if_icmpge
Poznámky
Adresy sú počítané v bajtoch od
začiatku bajtového kódu, čiže adresa 0 je prvý bajt v bajtovom kóde práve
vykonávanej metódy.