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.