if_icmpne

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.