if_acmpne

skok ak dve refrencie na objekt nie sú rovnaké

 

Jasmin Syntax

 
 
    if_acmpne <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_acmpne vyberá z vrchola zásobníka dve referencie na objekt a porovná ich. Ak dve referencie na objekt nie sú rovnaké (t.j . ak  obe sa odvolávajú  na ten istý objekt), vykonávanie sa rozdelí na adresy (pc + branchoffset), kde pc je adresa if_acmpne v bajtovom kóde a branchoffset je 16- bitový integer so znamienkom ktorý nasleduje kód if_acmpeq . Ak sú referencie rovnaké, vykonávanie pokračuje  na nasledujúcej inštrukcii.

Ak používate Jasmin, branchoffset je vypočítaný  z  adresy <label>.

Príklad

 
    aload_1         ; vloží referenciu na objekt v lokálnej premennej 1 do zásobníka
    aload_2         ; vloží referenciu na objekt v lokálnej premennej 2 do zásobníka
    if_acmpne Label ; ak sú referencie rôzne, skoč na  Label
    return          ; návrat ak sú identické
Label:
    ; vykonávanie pokračuje tu ak lokálne premenné 1 a 2 ukazujú na dva rôzne objekty

 

Bajtkód

 

Typ

Popis

u1

if_acmpne opcode = 0xA6 (166)

s2

branchoffset

 

Pozri tiež

if_icmpne, 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.