Jasmin Syntax
if_icmpne <label><label> is a label name. To define the location of the label, use the <label> name followed by a colon:
<label>:<label> then becomes associated the address of the following instruction. Labels can only be assigned one location in a method. On the other hand, a single <label> can be the target of multiple branch instructions.
Stack Before
Description After value1 ... value2 ...
if_icmpne pops the top two ints off the stack and compares them. If the two integers are not equal, execution branches to the address (pc + branchoffset), where pc is the address of the if_icmpne opcode in the bytecode and branchoffset is a 16-bit signed integer parameter following the if_icmpne opcode in the bytecode. If the integers are equal, execution continues at the next instruction.
If you are using Jasmin, branchoffset is computed for you from the address of <label>.
Example
bipush 2 ; push the int 2 onto the stack iload_1 ; push the int value in local variable 1 onto the stack if_icmpne Label ; if the value of local variable 1 does not equal 2, jump to Label return ; return if local variable 1 equals 2 Label: ; execution continues here if local variable 1 does not equals 2...Bytecode
Type | Description |
u1 | if_icmpne opcode = 0xA0 (160) |
s2 | branchoffset |
if_icmpeq, if_icmplt, if_icmpgt, if_icmple, if_icmpge
Notes
Addresses are measured in bytes from the start of the bytecode (i.e. address 0 is the first byte in the bytecode of the currently executing method).